使用C语言实现双向链表的冒泡排序
时间: 2023-10-21 09:04:01 浏览: 138
以下是使用C语言实现双向链表的冒泡排序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 双向链表节点结构体
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
// 创建双向链表节点
Node* create_node(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->prev = NULL;
node->next = NULL;
return node;
}
// 在双向链表尾部插入节点
void insert_node(Node* head, Node* node) {
Node* p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
node->prev = p;
}
// 冒泡排序双向链表
void bubble_sort(Node* head) {
Node* p, * q;
int tmp;
for (p = head->next; p != NULL; p = p->next) {
for (q = p->next; q != NULL; q = q->next) {
if (p->data > q->data) {
tmp = p->data;
p->data = q->data;
q->data = tmp;
}
}
}
}
// 打印双向链表
void print_list(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node* head = create_node(0); // 创建双向链表头节点
insert_node(head, create_node(5));
insert_node(head, create_node(3));
insert_node(head, create_node(8));
insert_node(head, create_node(1));
insert_node(head, create_node(6));
printf("Before sort: ");
print_list(head);
bubble_sort(head);
printf("After sort: ");
print_list(head);
return 0;
}
```
输出结果:
```
Before sort: 5 3 8 1 6
After sort: 1 3 5 6 8
```
阅读全文