用c语言实现对单链表和顺序表的定义插入删除查找建立各种功能的学习并加上注释
时间: 2024-10-08 17:19:45 浏览: 44
在C语言中,我们可以使用结构体和指针来实现单链表和顺序表的操作。这里我会分别给出它们的基本定义以及插入、删除和查找操作的示例,并附上简短的注释。
**1. 单链表(Linked List)**
```c
// 定义单链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} LinkedListNode;
// 创建一个新的链表头节点
LinkedListNode* createList() {
LinkedListNode* head = (LinkedListNode*)malloc(sizeof(LinkedListNode));
if (!head) {
printf("Memory allocation failed for list node.\n");
return NULL;
}
head->next = NULL; // 初始化链表为空
return head;
}
// 插入元素到链表头部
void insertAtBegin(LinkedListNode** head, int value) {
LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode));
if (!newNode) {
printf("Memory allocation failed for new node.\n");
return;
}
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 删除元素(根据值)
void deleteElement(LinkedListNode** head, int value) {
if (*head == NULL) {
return;
}
// 如果头节点是要删除的值
if ((*head)->data == value) {
LinkedListNode* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
// 否则遍历链表寻找目标节点
LinkedListNode* current = *head;
while (current->next != NULL && current->next->data != value) {
current = current->next;
}
if (current->next != NULL) {
LinkedListNode* temp = current->next;
current->next = current->next->next;
free(temp);
} else {
printf("Element not found in the list.\n");
}
}
// 查找元素(返回值,找不到返回NULL)
int findElement(LinkedListNode* head, int value) {
LinkedListNode* current = head;
while (current != NULL) {
if (current->data == value)
return current->data;
current = current->next;
}
return NULL; // 元素未找到
}
```
**2. 顺序表(Array)**
```c
#define MAX_SIZE 100
// 定义顺序表的数组
int sequence[MAX_SIZE];
// 初始化顺序表
void initializeSequence(int* seq) {
int i;
for (i = 0; i < MAX_SIZE; i++) {
seq[i] = 0;
}
}
// 插入元素(索引越界处理)
void insertIntoSequence(int* seq, int index, int value) {
if (index >= MAX_SIZE || index < 0) {
printf("Invalid index.\n");
return;
}
memmove(&seq[index + 1], &seq[index], sizeof(int) * (MAX_SIZE - index - 1));
seq[index] = value;
}
// 删除元素(根据索引)
void deleteFromSequence(int* seq, int index) {
if (index >= MAX_SIZE || index < 0) {
printf("Invalid index.\n");
return;
}
memmove(&seq[index], &seq[index + 1], sizeof(int) * (MAX_SIZE - index - 1));
}
// 查找元素(返回值,找不到返回-1)
int searchInSequence(const int* seq, int target) {
int i;
for (i = 0; i < MAX_SIZE; i++) {
if (seq[i] == target)
return i;
}
return -1; // 元素未找到
}
```
阅读全文