顺序表的基本操作完整代码c语言,包括初始化,删除,插入,查找
时间: 2024-10-08 18:21:57 浏览: 42
在C语言中,顺序表通常是一个数组结构,我们可以手动管理数组元素来实现基本的操作。以下是顺序表的一些基础操作的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 定义最大元素数
// 结构体表示顺序表节点
typedef struct {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 初始化顺序表,所有元素默认为0
Node* createList() {
Node* list = (Node*)malloc(sizeof(Node) * MAX_SIZE);
for (int i = 0; i < MAX_SIZE; i++) {
list[i].data = 0;
list[i].next = NULL; // 如果不是最后一个元素,指向NULL
}
return list;
}
// 插入元素到列表尾部
void insert(int value, Node** head) {
if (*head == NULL) { // 列表为空,创建新节点并作为头节点
*head = (Node*)malloc(sizeof(Node));
(*head)->data = value;
(*head)->next = NULL;
} else {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = (Node*)malloc(sizeof(Node)); // 创建新节点
current->next->data = value;
current->next->next = NULL;
}
}
// 删除指定值的元素
void deleteElement(int target, Node** head) {
if (*head == NULL) return; // 列表空则直接返回
if ((*head)->data == target) { // 如果第一个元素就是目标
Node* temp = *head;
*head = (*head)->next;
free(temp); // 释放第一个节点
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data != target) {
current = current->next;
}
if (current->next != NULL) { // 找到了目标,删除它
Node* toDelete = current->next;
current->next = current->next->next;
free(toDelete);
}
}
// 查找元素,如果找到返回其索引,未找到返回 -1
int searchElement(int target, Node* head) {
Node* current = head;
int index = 0;
while (current != NULL) {
if (current->data == target) {
return index;
}
current = current->next;
index++;
}
return -1; // 未找到目标元素
}
int main() {
Node* list = createList();
// 示例操作
insert(1, &list);
insert(2, &list);
insert(3, &list);
printf("Search element 2: %d\n", searchElement(2, list));
deleteElement(2, &list);
return 0;
}
```
阅读全文