C语言单链表的排序以及菜单的代码,用status
时间: 2024-10-18 22:06:03 浏览: 31
C语言中对单链表进行排序常见的有插入排序、选择排序、冒泡排序等,这里以插入排序为例,因为它相对简单且适用于链表。由于文本限制,我将给出一个基本的概念和伪代码,实际实现会涉及到指针操作。
```c
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
void insertionSortList(ListNode** head) {
ListNode* current = *head;
ListNode* prev = NULL;
while (current != NULL && current->next != NULL) {
if (current->val < current->next->val) {
// 将当前节点值小于其后节点的移到前面
ListNode* temp = current->next;
current->next = temp->next;
if (prev == NULL) {
*head = temp; // 如果prev为空,即头结点,更新头结点
} else {
prev->next = temp; // 否则,调整前一个节点的指向
}
prev = current; // 更新prev为当前节点
current = temp; // 更新current为下一个待比较的节点
} else {
current = current->next;
}
}
}
```
至于菜单代码,这通常是在控制台应用程序中用于交互的部分,你可以创建一个函数来处理用户输入并相应地调用链表排序函数:
```c
void printMenu() {
printf("1. Insertion Sort List\n");
printf("2. Exit Program\n");
printf("Enter your choice: ");
}
int getMenuChoice() {
int choice;
scanf("%d", &choice);
return choice;
}
int main() {
// 创建链表...
printMenu();
int status = 0;
while (status != 2) { // 循环直到用户选择退出
int choice = getMenuChoice();
switch (choice) {
case 1:
insertionSortList(&head); // 调用链表排序函数
break;
case 2:
status = 2; // 用户选择退出程序
break;
default:
printf("Invalid choice.\n");
}
printMenu(); // 显示菜单继续
}
return 0;
}
```
阅读全文