存放一组有序数,或产生一组随机数建立单链表并对单链表排序。用c语言实现
时间: 2024-09-24 19:26:13 浏览: 42
在C语言中,我们可以首先创建一个结构体表示链表节点,然后分别构建一个函数来生成有序数的链表(例如递归插入排序法),以及一个函数来生成随机数的链表(如使用rand()函数)。这里是一个简化的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 链表节点结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
// 生成随机数并添加到链表末尾
ListNode* generate_random_list(int n) {
srand(time(0)); // 初始化随机种子
ListNode* head = NULL;
for (int i = 0; i < n; i++) {
int random_val = rand() % 100; // 生成0~99之间的随机整数
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = random_val;
newNode->next = NULL;
if (!head) { // 如果链表为空
head = newNode;
} else { // 否则追加到尾部
ListNode* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = newNode;
}
}
return head;
}
// 插入排序算法用于将链表转换为有序
void insertion_sort_list(ListNode* head) {
if (!head || !head->next) return;
ListNode* sorted_head = head;
ListNode* current = head->next;
while (current != NULL) {
ListNode* next_temp = current->next;
if (current->val < sorted_head->val) {
current->next = sorted_head;
sorted_head = current;
} else {
ListNode* temp = sorted_head;
while (temp->next && temp->next->val < current->val) {
temp = temp->next;
}
current->next = temp->next;
temp->next = current;
}
current = next_temp;
}
head = sorted_head;
}
// 打印链表
void print_list(ListNode* head) {
while (head) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
int n;
printf("Enter the number of elements in the list: ");
scanf("%d", &n);
ListNode* list = generate_random_list(n);
printf("Original Random List:\n");
print_list(list);
insertion_sort_list(list);
printf("Sorted List:\n");
print_list(list);
free(list); // 释放内存
return 0;
}
```
阅读全文