C语言单链表冒泡排序
时间: 2023-10-14 18:17:23 浏览: 151
下面是一个使用 C 语言实现单链表冒泡排序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 单链表节点结构
struct Node {
int data;
struct Node* next;
};
// 在链表末尾插入节点
void insert(struct Node** head_ref, int new_data) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = new_data;
new_node->next = NULL;
if (*head_ref == NULL) {
*head_ref = new_node;
return;
}
struct Node* last = *head_ref;
while (last->next != NULL) {
last = last->next;
}
last->next = new_node;
}
// 交换链表中两个节点的数据
void swap(struct Node* a, struct Node* b) {
int temp = a->data;
a->data = b->data;
b->data = temp;
}
// 使用冒泡排序算法对链表进行排序
void bubbleSort(struct Node* head) {
int swapped, i;
struct Node* ptr1;
struct Node* lptr = NULL;
if (head == NULL)
return;
do {
swapped = 0;
ptr1 = head;
while (ptr1->next != lptr) {
if (ptr1->data > ptr1->next->data) {
swap(ptr1, ptr1->next);
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
} while (swapped);
}
// 打印链表中的数据
void printList(struct Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
// 主函数
int main() {
struct Node* head = NULL;
insert(&head, 5);
insert(&head, 3);
insert(&head, 8);
insert(&head, 1);
insert(&head, 6);
printf("原始链表:");
printList(head);
bubbleSort(head);
printf("排序后链表:");
printList(head);
return 0;
}
```
这段代码中,我们首先定义了一个 `Node` 结构体作为链表节点的数据结构。然后实现了 `insert` 函数用于在链表末尾插入节点,`swap` 函数用于交换链表中两个节点的数据。
冒泡排序算法的实现是通过遍历链表多次,每次比较相邻两个节点的数据,并根据需要交换它们的位置。函数 `bubbleSort` 是实现冒泡排序的主要逻辑。
最后,我们使用 `main` 函数来测试这段代码。我们在链表中插入一些数据,并打印原始链表,然后使用 `bubbleSort` 函数对链表进行排序,最后再次打印排序后的链表。
阅读全文