请用c语言写一段链表冒泡排序的函数
时间: 2024-01-20 14:03:44 浏览: 94
C语言程序设计-编写函数用冒泡排序法对数组中的数据进行从小到大的排序;.c
5星 · 资源好评率100%
好的,以下是一段使用C语言实现链表冒泡排序的函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 链表冒泡排序函数
void bubbleSort(Node* head) {
Node *p, *q, *end, *tmp;
// 如果链表为空或只有一个节点,无需排序
if (head == NULL || head->next == NULL) {
return;
}
end = NULL;
while (end != head->next) {
p = head;
q = head->next;
while (q != end) {
if (q->data < q->next->data) {
tmp = q->next;
q->next = tmp->next;
tmp->next = q;
p->next = tmp;
q = tmp;
}
p = q;
q = q->next;
}
end = q;
}
}
// 创建链表
Node* createList(int data[], int n) {
Node *head, *p, *tail;
head = (Node*)malloc(sizeof(Node));
tail = head;
for (int i = 0; i < n; i++) {
p = (Node*)malloc(sizeof(Node));
p->data = data[i];
tail->next = p;
tail = p;
}
tail->next = NULL;
return head;
}
// 打印链表
void printList(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
int data[] = { 4, 2, 1, 3, 5 };
int n = sizeof(data) / sizeof(data[0]);
Node* head = createList(data, n);
printf("排序前:");
printList(head);
bubbleSort(head);
printf("排序后:");
printList(head);
return 0;
}
```
这段代码先定义了一个链表结构体 `Node`,包含一个整数类型的 `data` 和一个指向下一个节点的指针 `next`。然后定义了一个 `bubbleSort` 函数,使用冒泡排序算法对链表进行排序。最后,通过 `createList` 函数创建了一个链表,通过 `printList` 函数打印链表。在 `main` 函数中,先创建并打印原始的链表,然后调用 `bubbleSort` 函数对链表进行排序,最后再次打印链表。
阅读全文