请用c语言写代码,要求如下:已知一个正整数组成的无序序列,个数未知,但至少有一个元素,你的任务是建立一个单链表,并使用该链表存储这个正整数序列,然后将这个链表进行排序,使得排序后的链表为递增序列。正整数的输入用-1作为结束标志,注意-1不算这个正整数序列中的元素(不要统计-1)。在排序的过程中,你可以自己选择排序算法(冒泡排序、选择排序等),但必须是通过修改结点的指针域来进行排序,而不是对结点的数据域进行修改。程序结束后要释放所有节点占据的空间。
时间: 2024-02-05 22:13:33 浏览: 98
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node* next;
} Node;
Node* createList() {
Node* head = NULL;
Node* tail = NULL;
int num;
while (1) {
scanf("%d", &num);
if (num == -1) {
break;
}
Node* node = (Node*)malloc(sizeof(Node));
node->value = num;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
void printList(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}
void freeList(Node* head) {
Node* p = head;
while (p != NULL) {
Node* temp = p;
p = p->next;
free(temp);
}
}
void sortList(Node* head) {
if (head == NULL || head->next == NULL) {
return;
}
Node* p = head;
while (p->next != NULL) {
Node* q = p->next;
while (q != NULL) {
if (p->value > q->value) {
int temp = p->value;
p->value = q->value;
q->value = temp;
}
q = q->next;
}
p = p->next;
}
}
int main() {
Node* head = createList();
printf("Original list: ");
printList(head);
sortList(head);
printf("Sorted list: ");
printList(head);
freeList(head);
return 0;
}
```
代码实现了以下功能:
1. 创建单链表,输入正整数序列,以-1作为结束标志。
2. 打印原始链表。
3. 对链表进行排序,采用选择排序算法。
4. 打印排序后的链表。
5. 释放所有节点占据的空间。
其中,`createList()`函数用于创建单链表,`printList()`函数用于打印链表,`freeList()`函数用于释放链表的内存空间,`sortList()`函数用于对链表进行排序。
阅读全文