c语言单链表的创建,插入、删除、查找和打印算法
时间: 2023-05-28 07:07:17 浏览: 138
单链表是一种常见的数据结构,它由一个个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。下面是C语言单链表的创建,插入、删除、查找和打印算法。
1. 创建单链表
单链表的创建过程分为两步:创建头结点和添加数据节点。
```c
struct Node {
int data; // 数据域
struct Node* next; // 指针域
};
// 创建头结点
struct Node* createList() {
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
return head;
}
// 添加数据节点
void addNode(struct Node* head, int data) {
struct Node* p = (struct Node*)malloc(sizeof(struct Node));
p->data = data;
p->next = head->next;
head->next = p;
}
```
2. 插入节点
单链表的插入操作需要知道要插入的位置和要插入的数据。假设要在第k个节点后插入一个数据为x的节点,那么需要先找到第k个节点,然后新建一个节点,将x赋值给它的数据域,将它的指针域指向第k个节点的下一个节点,将第k个节点的指针域指向新节点。
```c
// 在第k个节点后插入数据x
void insertNode(struct Node* head, int k, int x) {
struct Node* p = head->next;
int i = 1;
while (p && i < k) {
p = p->next;
i++;
}
if (p == NULL || i > k) {
printf("插入位置无效\n");
return;
}
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = x;
newNode->next = p->next;
p->next = newNode;
}
```
3. 删除节点
单链表的删除操作也需要知道要删除的位置,假设要删除第k个节点,那么需要先找到第k-1个节点,将它的指针域指向第k+1个节点,然后释放第k个节点。
```c
// 删除第k个节点
void deleteNode(struct Node* head, int k) {
struct Node* p = head;
int i = 0;
while (p->next && i < k-1) {
p = p->next;
i++;
}
if (p->next == NULL || i > k-1) {
printf("删除位置无效\n");
return;
}
struct Node* q = p->next;
p->next = q->next;
free(q);
}
```
4. 查找节点
单链表的查找操作需要遍历整个链表,找到第一个数据等于给定值的节点。
```c
// 查找第一个数据等于x的节点
struct Node* findNode(struct Node* head, int x) {
struct Node* p = head->next;
while (p && p->data != x) {
p = p->next;
}
return p;
}
```
5. 打印链表
单链表的打印操作需要遍历整个链表,依次输出每个节点的数据域。
```c
// 打印链表
void printList(struct Node* head) {
struct Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
```
阅读全文