嵌套结构体顺序表的基本操作代码
时间: 2024-09-23 21:16:48 浏览: 48
嵌套结构体顺序表是一种数据结构,其中的数据项包含另一个结构体类型的实例。在C语言中,实现基本操作如插入、删除和查找,通常会涉及指针和数组。下面是一个简单的例子,假设我们有一个`Person`结构体和一个嵌套的`Address`结构体:
```c
#include <stdio.h>
typedef struct Address {
char street[50];
char city[30];
} Address;
typedef struct Person {
char name[50];
Address address;
} Person;
// 插入新元素
void insert(Person* list, int index, const char* name, char street[], char city[]) {
if (index >= 0 && index <= list->size) {
Person new_entry = {name, {street, city}};
Person* temp = (Person*)malloc(sizeof(Person) * (list->size + 1));
if (temp != NULL) {
for (int i = list->size; i > index; i--) {
temp[i] = list[i - 1];
}
temp[index] = new_entry;
free(list);
list = temp;
list->size++;
} else {
printf("Memory allocation failed.\n");
}
} else {
printf("Invalid index.\n");
}
}
// 删除元素
void delete(Person** list, int index) {
if (index >= 0 && index < list->size) {
Person* temp = (Person*)malloc(sizeof(Person) * list->size);
if (temp != NULL) {
for (int i = 0; i < index; i++) {
temp[i] = list[i];
}
for (int i = index; i < list->size - 1; i++) {
temp[i] = list[i + 1];
}
free(list);
list = temp;
list->size--;
} else {
printf("Memory allocation failed.\n");
}
} else {
printf("Invalid index.\n");
}
}
// 查找元素
Person* search(const Person* list, const char* name) {
for (int i = 0; i < list->size; i++) {
if (!strcmp(list[i].name, name)) {
return &list[i];
}
}
return NULL;
}
int main() {
Person list[3] = {{"Alice", {"123 Main St.", "Springfield"}}, {"Bob", {"456 Elm St.", "New York"}}, {"Charlie", {"789 Oak St.", "Chicago"}}};
Person* head = list;
// ...其他操作,例如insert, delete, search
return 0;
}
```
阅读全文