用c语言编译以下程序要求针对顺序存储的线性表完成四个操作函数,分别实现线性表中数据的插入、删除与查找等功能。
时间: 2024-09-12 09:11:38 浏览: 62
在C语言中,编译一个涉及顺序存储线性表的数据结构和操作函数,需要定义一个结构体来存储元素及其长度,并实现插入、删除和查找等基本操作。下面是一个简单的示例:
首先,定义一个`SequentialList`结构体:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct SequentialList {
int* elem; // 存储元素的指针
int length; // 当前元素数量
} SequentialList;
// 初始化顺序表,分配初始容量
SequentialList* create_list(int capacity) {
SequentialList* list = malloc(sizeof(SequentialList));
list->elem = malloc(capacity * sizeof(int));
list->length = 0;
return list;
}
// 插入元素到列表末尾
void insert(SequentialList* list, int value) {
if (list->length == list->elem[0] + sizeof(int) * list->length) {
// 扩容
list->elem = realloc(list->elem, (list->length * 2 + 1) * sizeof(int)); // 动态增加空间
}
list->elem[list->length++] = value;
}
// 删除指定索引处的元素
void delete(SequentialList* list, int index) {
if (index < 0 || index >= list->length) {
printf("Index out of bounds.\n");
return;
}
memmove(&list- index - 1));
--list->length;
}
// 查找元素并返回其下标,找不到返回-1
int find(SequentialList* list, int value) {
for (int i = 0; i < list->length; ++i) {
if (list->elem[i] == value) {
return i;
}
}
return -1;
}
// 打印列表内容
void print_list(SequentialList* list) {
for (int i = 0; i < list->length; ++i) {
printf("%d ", list->elem[i]);
}
printf("\n");
}
// 主函数演示用法
int main() {
SequentialList* myList = create_list(5);
insert(myList, 10);
insert(myList, 20);
delete(myList, 0);
print_list(myList); // 输出剩余的元素
printf("Element at index 0 is %d\n", find(myList, 10));
free(myList->elem);
free(myList);
return 0;
}
```
这个程序包含了创建列表、插入、删除、查找和打印功能。注意,在实际应用中,你需要处理好内存管理,如适当处理内存分配失败的情况,以及在不再需要列表时释放内存。
阅读全文