单链表c语言的插入,查找,删除
时间: 2024-03-23 12:14:10 浏览: 58
单链表是一种常用的数据结构,它由若干个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。下面是单链表的插入,查找和删除操作的C语言代码示例。
1. 插入操作
单链表的插入操作分为三种情况:
- 在头部插入节点
- 在尾部插入节点
- 在中间插入节点
下面是单链表的插入操作示例:
```c
typedef struct node {
int data;
struct node *next;
} Node;
// 在头部插入节点
Node *insert_head(Node *head, int data) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = head;
head = new_node;
return head;
}
// 在尾部插入节点
Node *insert_tail(Node *head, int data) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
} else {
Node *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_node;
}
return head;
}
// 在中间插入节点
Node *insert_mid(Node *head, int index, int data) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
Node *p = head;
int i = 1;
while (p != NULL && i < index) {
p = p->next;
i++;
}
if (p == NULL) {
printf("插入位置无效!\n");
} else {
new_node->next = p->next;
p->next = new_node;
}
return head;
}
```
2. 查找操作
单链表的查找操作可以分为两种情况:
- 查找指定位置的节点
- 查找指定数据的节点
下面是单链表的查找操作示例:
```c
// 查找指定位置的节点
Node *search_pos(Node *head, int index) {
Node *p = head;
int i = 1;
while (p != NULL && i < index) {
p = p->next;
i++;
}
if (p == NULL) {
printf("查找位置无效!\n");
}
return p;
}
// 查找指定数据的节点
Node *search_data(Node *head, int data) {
Node *p = head;
while (p != NULL && p->data != data) {
p = p->next;
}
if (p == NULL) {
printf("查找数据不存在!\n");
}
return p;
}
```
3. 删除操作
单链表的删除操作分为三种情况:
- 删除头部节点
- 删除尾部节点
- 删除中间节点
下面是单链表的删除操作示例:
```c
// 删除头部节点
Node *delete_head(Node *head) {
if (head == NULL) {
printf("链表为空!\n");
} else {
Node *p = head;
head = head->next;
free(p);
}
return head;
}
// 删除尾部节点
Node *delete_tail(Node *head) {
if (head == NULL) {
printf("链表为空!\n");
} else if (head->next == NULL) {
free(head);
head = NULL;
} else {
Node *p = head;
while (p->next->next != NULL) {
p = p->next;
}
free(p->next);
p->next = NULL;
}
return head;
}
// 删除中间节点
Node *delete_mid(Node *head, int index) {
Node *p = head;
int i = 1;
while (p != NULL && i < index) {
p = p->next;
i++;
}
if (p == NULL || p->next == NULL) {
printf("删除位置无效!\n");
} else {
Node *q = p->next;
p->next = q->next;
free(q);
}
return head;
}
```
阅读全文