请用C语言实现,建立一个单链表并能够对该单链表进行增加,删除,修改,查询的操作
时间: 2024-09-23 22:01:10 浏览: 18
在C语言中,我们可以使用结构体来表示链表节点,并提供函数来实现添加、删除、修改和查询操作。这里是一个简单的例子:
首先,我们定义一个链表节点结构体:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化一个新的链表节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 在链表末尾添加新节点
void appendNode(Node** headRef, int value) {
Node* newNode = createNode(value);
if (*headRef == NULL) {
*headRef = newNode;
return;
}
Node* lastNode = *headRef;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
// 删除给定值的节点
void deleteNode(Node** headRef, int value) {
Node* temp = *headRef, *prev = NULL;
if (temp != NULL && temp->data == value) {
*headRef = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != value) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return;
prev->next = temp->next;
free(temp);
}
// 修改指定位置的节点值
void modifyNode(Node** headRef, int oldVal, int newVal, int position) {
for (int i = 0, curr = *headRef; curr != NULL && i < position; ++i, curr = curr->next) {}
if (curr == NULL || curr->data != oldVal) {
printf("Element not found.\n");
return;
}
curr->data = newVal;
}
// 查询特定值的节点是否存在
int searchNode(Node* head, int value) {
Node* current = head;
while (current != NULL) {
if (current->data == value)
return 1;
current = current->next;
}
return 0;
}
```
现在你可以使用这些函数来创建、操作和管理链表了。例如:
```c
int main() {
Node* head = NULL;
// 添加节点
appendNode(&head, 1);
appendNode(&head, 2);
appendNode(&head, 3);
// 打印链表
printList(head); // 自己实现的打印链表函数
// 删除节点
deleteNode(&head, 2);
// 修改节点
modifyNode(&head, 1, 4, 0); // 修改第一个节点的值
// 查询节点
if (searchNode(head, 4)) {
printf("Found the value.\n");
} else {
printf("Value not found.\n");
}
return 0;
}
```