c语言如何进行链表排序输出
时间: 2024-05-06 07:19:40 浏览: 71
c语言 整数链表排序
4星 · 用户满意度95%
以下是一个示例程序,演示如何使用C语言对链表进行排序并输出:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 插入元素到链表尾部
void insert(Node **head, int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
Node *curr = *head;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = newNode;
}
}
// 输出链表元素
void printList(Node *head) {
Node *curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
// 交换两个节点数据
void swap(Node *a, Node *b) {
int temp = a->data;
a->data = b->data;
b->data = temp;
}
// 冒泡排序链表
void sort(Node *head) {
Node *curr, *prev;
int swapped;
// 如果链表为空或只有一个节点,则不需要排序
if (head == NULL || head->next == NULL) {
return;
}
do {
swapped = 0;
curr = head;
while (curr->next != prev) {
if (curr->data > curr->next->data) {
swap(curr, curr->next);
swapped = 1;
}
curr = curr->next;
}
prev = curr;
} while (swapped);
}
int main() {
Node *head = NULL;
// 插入一些元素到链表中
insert(&head, 5);
insert(&head, 3);
insert(&head, 8);
insert(&head, 1);
insert(&head, 9);
printf("Before sorting:\n");
printList(head);
// 对链表进行排序
sort(head);
printf("After sorting:\n");
printList(head);
return 0;
}
```
该程序首先定义了一个链表节点的结构体,包括数据和指向下一个节点的指针。然后定义了插入元素到链表尾部、输出链表元素、交换两个节点数据、冒泡排序链表的函数。
在主函数中,插入了一些元素到链表中,然后输出链表元素,对链表进行排序,再次输出链表元素。冒泡排序算法是一种简单但低效的排序算法,该算法通过反复交换相邻的元素来进行排序,时间复杂度为O(n^2)。
阅读全文