用C语言写一个以任意表单(数据自建,数据元素至少由3个成员组成,成员类型至少两种)实现上述创建顺序表,输出顺序表,插入第i个元素,输出顺序表,删除第i个元素输出顺序表等过程。
时间: 2024-09-30 20:13:10 浏览: 39
在C语言中,我们可以使用结构体来表示自定义的数据表单,并通过数组来实现顺序表。这里假设我们有一个名为`FormData`的结构体,包含两个不同类型(如整数和字符串)的成员。以下是创建、操作顺序表的基本步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 自定义表单结构体
typedef struct {
int data1;
char* data2; // 使用char*存储字符串类型数据
} FormData;
// 动态分配顺序表
typedef struct List {
FormData* elements;
int size;
int capacity;
} List;
// 初始化顺序表
void createList(List* list) {
list->elements = (FormData*)malloc(sizeof(FormData));
list->size = 0;
list->capacity = 3; // 初始容量
}
// 输出顺序表
void printList(List* list) {
for (int i = 0; i < list->size; i++) {
printf("Element %d: data1 = %d, data2 = %s\n", i+1, list->elements[i].data1, list->elements[i].data2);
}
}
// 插入第i个元素
void insertElement(List* list, int index, int new_data1, const char* new_data2) {
if (index < 0 || index > list->size) {
printf("Invalid insertion index.\n");
return;
}
if (list->size == list->capacity) { // 扩展列表
FormData* temp = (FormData*)realloc(list->elements, sizeof(FormData) * (list->capacity + 3));
if (!temp) {
printf("Memory allocation failed.\n");
return;
}
list->elements = temp;
list->capacity += 3;
}
memmove(&list->elements[index+1], &list->elements[index], sizeof(FormData) * (list->size - index)); // 移动元素
list->elements[index].data1 = new_data1;
list->elements[index].data2 = strdup(new_data2); // 字符串复制,避免原地修改
list->size++;
}
// 删除第i个元素
void deleteElement(List* list, int index) {
if (index < 0 || index >= list->size) {
printf("Invalid deletion index.\n");
return;
}
memmove(&list->elements[index], &list->elements[index+1], sizeof(FormData) * (list->size - index - 1)); // 移动元素
free(list->elements[list->size-1].data2); // 释放字符串内存
list->size--;
}
int main() {
List myList;
createList(&myList);
// 添加一些初始元素并打印
insertElement(&myList, 0, 10, "Hello");
insertElement(&myList, 1, 20, "World");
insertElement(&myList, 2, 30, "C Programming");
printList(&myList);
// 删除某个元素并打印
deleteElement(&myList, 1);
printList(&myList);
return 0;
}
```
在这个示例中,我们首先定义了一个`FormData`结构体,然后创建了`List`结构体,包含了元素数组、当前大小和最大容量。实现了创建、插入、删除和打印顺序表的功能。
阅读全文