利用链式存储结构,编写程序,实现直接插入排序和冒泡排序,添加函数:菜单选项、数据输入、排序方式选择、排序输出、冒泡排序、插入排序等。使用c语言输出以上内容的代码,并为每行添加注释
时间: 2024-03-15 14:47:18 浏览: 107
以下是利用链式存储结构实现直接插入排序和冒泡排序的 C 代码,包括菜单选项、数据输入、排序方式选择、排序输出、冒泡排序、插入排序等函数,并为每行代码添加注释:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct node {
int data; // 数据
struct node *next; // 指向下一个节点的指针
} Node;
// 创建新节点
Node *createNode(int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 打印链表
void printList(Node *head) {
Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 直接插入排序
void insertSort(Node *head) {
Node *p = head->next;
head->next = NULL; // 从 head 开始建立新链表
while (p != NULL) {
Node *q = head;
while (q->next != NULL && q->next->data < p->data) {
q = q->next;
}
Node *tmp = p->next; // 保存下一个节点
p->next = q->next;
q->next = p;
p = tmp;
}
}
// 冒泡排序
void bubbleSort(Node *head) {
int len = 0;
Node *p = head->next;
while (p != NULL) {
len++;
p = p->next;
}
for (int i = 0; i < len; i++) {
p = head->next;
for (int j = 0; j < len - i - 1; j++) {
if (p->data > p->next->data) {
int tmp = p->data;
p->data = p->next->data;
p->next->data = tmp;
}
p = p->next;
}
}
}
// 菜单选项
void printMenu() {
printf("1. 输入数据\n");
printf("2. 直接插入排序\n");
printf("3. 冒泡排序\n");
printf("4. 输出排序结果\n");
printf("5. 退出\n");
}
// 数据输入
void inputList(Node *head) {
printf("请输入数据,以空格分隔,输入任意非数字字符结束:\n");
Node *p = head;
int data;
while (scanf("%d", &data) == 1) {
Node *newNode = createNode(data);
p->next = newNode;
p = p->next;
}
getchar(); // 读取多余的字符
}
// 排序方式选择
void sortList(Node *head) {
printf("请选择排序方式(1-直接插入排序,2-冒泡排序):\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
insertSort(head);
break;
case 2:
bubbleSort(head);
break;
default:
printf("无效的选择!\n");
break;
}
}
// 排序输出
void outputList(Node *head) {
printf("排序结果为:\n");
printList(head->next);
}
int main() {
Node *head = createNode(0); // 创建头节点
int choice;
while (1) {
printMenu(); // 打印菜单选项
scanf("%d", &choice);
switch (choice) {
case 1:
inputList(head); // 数据输入
break;
case 2:
case 3:
sortList(head); // 排序方式选择
break;
case 4:
outputList(head); // 排序输出
break;
case 5:
printf("谢谢使用!\n");
exit(0);
default:
printf("无效的选择!\n");
break;
}
}
return 0;
}
```
阅读全文
相关推荐
![text/x-c++](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![mht](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![text/x-c](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)