参考教材抽象数据类型 List,编程实现线性表的顺序存储及其基本操作,在 main()函数中测试各基本操作的正确性。用C语言
时间: 2024-09-28 10:17:37 浏览: 30
在C语言中,我们可以使用数组来实现线性表的顺序存储,即List。这里是一个简单的例子,我们创建一个名为`ListNode`的结构体作为链表节点,并实现了插入、删除和查找等基本操作。注意,C语言并没有内置的列表或集合数据结构,所以我们需要手动处理。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int data;
struct ListNode* next; // 指向下一个元素的指针
} ListNode;
// 创建一个新的链表节点
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 在链表末尾添加新元素
void appendToList(ListNode** head, int value) {
ListNode* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
ListNode* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 删除指定位置的元素
void deleteElement(ListNode** head, int index) {
if (*head == NULL || index <= 0) {
printf("Invalid operation.\n");
return;
}
ListNode* temp = *head;
for (int i = 0; i < index - 1 && temp != NULL; i++) {
temp = temp->next;
}
if (temp == NULL) {
printf("Element not found.\n");
} else {
temp->next = temp->next->next;
}
}
// 查找并打印指定值的节点
void searchElement(ListNode** head, int value) {
ListNode* current = *head;
while (current != NULL) {
if (current->data == value) {
printf("Found element %d at position %d\n", value, current->data);
break;
}
current = current->next;
}
if (current == NULL) {
printf("Element not found.\n");
}
}
// 主函数测试
int main() {
ListNode* listHead = NULL;
// 插入测试
appendToList(&listHead, 1);
appendToList(&listHead, 2);
appendToList(&listHead, 3);
// 删除测试
deleteElement(&listHead, 1); // 删除第一个元素
// 查找测试
searchElement(&listHead, 2);
searchElement(&listHead, 4); // 查找不存在的元素
return 0;
}
```
这个程序首先创建了一个空的链表,然后分别进行了插入、删除和查找的操作,并在main函数中检查结果是否正确。记得运行前确保有足够的内存空间,因为动态分配的节点可能会造成内存泄漏,如果需要的话,还需要提供释放内存的方法。