链表的冒泡排序c语言
时间: 2023-08-09 12:07:44 浏览: 110
冒泡排序和选择排序_C语言_冒泡排序_选择排序_
5星 · 资源好评率100%
链表的冒泡排序是一种基本的排序算法,它可以用于对链表中的元素进行排序。下面是一个使用C语言实现链表冒泡排序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 在链表尾部插入新节点
void insertNode(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
} else {
Node* curr = *head;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = newNode;
}
}
// 交换两个节点的值
void swap(Node* a, Node* b) {
int temp = a->data;
a->data = b->data;
b->data = temp;
}
// 链表冒泡排序
void bubbleSort(Node* head) {
if (head == NULL || head->next == NULL) {
return;
}
int swapped;
Node* curr;
Node* last = NULL;
do {
swapped = 0;
curr = head;
while (curr->next != last) {
if (curr->data > curr->next->data) {
swap(curr, curr->next);
swapped = 1;
}
curr = curr->next;
}
last = curr;
} while (swapped);
}
// 打印链表
void printList(Node* head) {
Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
// 主函数
int main() {
Node* head = NULL;
// 在链表尾部插入节点
insertNode(&head, 5);
insertNode(&head, 3);
insertNode(&head, 8);
insertNode(&head, 2);
insertNode(&head, 1);
printf("排序前的链表:");
printList(head);
bubbleSort(head);
printf("排序后的链表:");
printList(head);
return 0;
}
```
以上代码定义了一个链表节点结构 `Node`,并实现了创建新节点、在链表尾部插入新节点、交换两个节点的值、链表冒泡排序以及打印链表的功能。在主函数中,我们创建了一个链表并进行排序,最后打印排序后的链表结果。
希望以上代码能对你有所帮助!如有任何疑问,请随时提问。
阅读全文