C语言单链表的排序以及菜单的代码
时间: 2024-10-18 20:05:27 浏览: 5
在C语言中,对单链表进行排序通常涉及到链表的遍历和元素比较操作。这里我们以冒泡排序为例来介绍基本思路:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 冒泡排序函数
void bubbleSort(Node** head) {
Node* temp = NULL;
for (int pass = 0; pass < sizeof(*head)-1; pass++) { // 遍历链表
for (Node* current = *head; current != NULL; current = current->next) {
if (current->next != NULL && current->data > current->next->data) {
// 如果当前节点大于下一个节点,交换它们的位置
temp = current->data;
current->data = current->next->data;
current->next->data = temp;
}
}
}
}
// 添加新节点到链表
void insertNode(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = (*head);
*head = newNode;
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 插入一些数据并构建链表
insertNode(&head, 5);
insertNode(&head, 2);
insertNode(&head, 8);
insertNode(&head, 1);
// 对链表进行冒泡排序
bubbleSort(&head);
// 打印排序后的链表
printList(head);
return 0;
}
```
关于菜单代码,这通常是控制台应用的一部分,用于让用户选择操作。下面是一个简单的例子:
```c
#include <stdio.h>
void displayMenu() {
printf("1. Insert\n");
printf("2. Sort\n");
printf("3. Print List\n");
printf("4. Exit\n");
printf("Enter your choice: ");
}
int getMenuChoice() {
int choice;
scanf("%d", &choice);
return choice;
}
int main() {
Node* head = NULL;
int userChoice;
while (1) {
displayMenu();
userChoice = getMenuChoice();
switch (userChoice) {
case 1: // 插入操作
// 实现插入操作...
break;
case 2: // 排序操作
// 调用上面的bubbleSort函数...
break;
case 3: // 打印列表
// 调用printList函数...
break;
case 4: // 退出程序
exit(0);
default:
printf("Invalid choice.\n");
break;
}
}
return 0;
}
```
阅读全文