c语言单链表的全部操作
时间: 2024-02-28 07:48:52 浏览: 14
单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。C语言中,单链表的操作包括以下几个方面:
1. 定义节点结构体
```c
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node;
```
2. 创建链表
```c
Node *createList() {
Node *head = (Node *)malloc(sizeof(Node)); // 创建头结点
head->next = NULL; // 头结点的指针域为空
Node *tail = head; // 尾指针指向头结点
int data;
while (scanf("%d", &data) != EOF) { // 输入数据,以EOF结束
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新节点
newNode->data = data;
newNode->next = NULL;
tail->next = newNode; // 将新节点插入到尾部
tail = newNode; // 更新尾指针
}
return head;
}
```
3. 遍历链表
```c
void traverseList(Node *head) {
Node *p = head->next; // 指向第一个节点
while (p != NULL) {
printf("%d ", p->data);
p = p->next; // 指向下一个节点
}
printf("\n");
}
```
4. 插入节点
```c
void insertNode(Node *head, int pos, int data) {
Node *p = head;
for (int i = 0; i < pos - 1 && p != NULL; i++) { // 找到要插入位置的前一个节点
p = p->next;
}
if (p == NULL) {
printf("插入位置无效\n");
return;
}
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新节点
newNode->data = data;
newNode->next = p->next; // 将新节点插入到链表中
p->next = newNode;
}
```
5. 删除节点
```c
void deleteNode(Node *head, int pos) {
Node *p = head;
for (int i = 0; i < pos - 1 && p != NULL; i++) { // 找到要删除位置的前一个节点
p = p->next;
}
if (p == NULL || p->next == NULL) {
printf("删除位置无效\n");
return;
}
Node *temp = p->next; // 保存要删除的节点
p->next = temp->next; // 将要删除的节点从链表中删除
free(temp); // 释放内存
}
```
6. 修改节点
```c
void modifyNode(Node *head, int pos, int data) {
Node *p = head->next;
for (int i = 0; i < pos - 1 && p != NULL; i++) { // 找到要修改的节点
p = p->next;
}
if (p == NULL) {
printf("修改位置无效\n");
return;
}
p->data = data; // 修改节点的数据
}
```
7. 查找节点
```c
int searchNode(Node *head, int data) {
Node *p = head->next;
int pos = 1;
while (p != NULL && p->data != data) { // 查找节点
p = p->next;
pos++;
}
if (p == NULL) {
printf("未找到该节点\n");
return -1;
} else {
printf("该节点在链表中的位置为:%d\n", pos);
return pos;
}
}
```