用结构体类型描述排序表党的存储结构,实验环境中给出含有n个学生的成绩表,每条记录由学号、姓名和分数组成,设计一个菜单操作界面,实现录入学生基本信息,直接插入排序,折半插入排序,冒泡排序,简单选择排序,输出学生信息,退出
时间: 2023-09-30 16:04:08 浏览: 45
好的,以下是结构体类型描述排序表党的存储结构的代码:
```c
#define MAXSIZE 100 // 最大记录数
typedef struct{
int id; // 学号
char name[20]; // 姓名
int score; // 分数
}Student;
typedef struct{
Student r[MAXSIZE+1]; // 存储空间,r[0]未用
int length; // 顺序表长度
}SqList;
```
接下来是菜单操作界面的代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100 // 最大记录数
typedef struct{
int id; // 学号
char name[20]; // 姓名
int score; // 分数
}Student;
typedef struct{
Student r[MAXSIZE+1]; // 存储空间,r[0]未用
int length; // 顺序表长度
}SqList;
// 直接插入排序
void InsertSort(SqList *L){
int i, j;
for (i = 2; i <= L->length; i++){
if (L->r[i].score < L->r[i-1].score){
L->r[0] = L->r[i];
L->r[i] = L->r[i-1];
for (j = i-2; L->r[0].score < L->r[j].score; j--)
L->r[j+1] = L->r[j];
L->r[j+1] = L->r[0];
}
}
}
// 折半插入排序
void BInsertSort(SqList *L){
int i, j, low, high, mid;
for (i = 2; i <= L->length; i++){
L->r[0] = L->r[i];
low = 1;
high = i - 1;
while (low <= high){
mid = (low + high) / 2;
if (L->r[0].score < L->r[mid].score)
high = mid - 1;
else
low = mid + 1;
}
for (j = i-1; j >= high+1; j--)
L->r[j+1] = L->r[j];
L->r[high+1] = L->r[0];
}
}
// 冒泡排序
void BubbleSort(SqList *L){
int i, j;
for (i = 1; i < L->length; i++){
for (j = L->length-1; j >= i; j--){
if (L->r[j].score < L->r[j-1].score){
L->r[0] = L->r[j];
L->r[j] = L->r[j-1];
L->r[j-1] = L->r[0];
}
}
}
}
// 简单选择排序
void SelectSort(SqList *L){
int i, j, min;
for (i = 1; i < L->length; i++){
min = i;
for (j = i+1; j <= L->length; j++){
if (L->r[j].score < L->r[min].score)
min = j;
}
if (min != i){
L->r[0] = L->r[i];
L->r[i] = L->r[min];
L->r[min] = L->r[0];
}
}
}
// 输出学生信息
void PrintStudent(SqList L){
int i;
printf("%-10s%-20s%s\n", "学号", "姓名", "分数");
for (i = 1; i <= L.length; i++)
printf("%-10d%-20s%d\n", L.r[i].id, L.r[i].name, L.r[i].score);
}
// 菜单操作界面
void Menu(){
SqList L;
int i, choice;
printf("请输入学生个数:");
scanf("%d", &L.length);
printf("请依次输入学生学号、姓名和分数:\n");
for (i = 1; i <= L.length; i++)
scanf("%d%s%d", &L.r[i].id, L.r[i].name, &L.r[i].score);
while (1){
printf("\n1. 直接插入排序\n");
printf("2. 折半插入排序\n");
printf("3. 冒泡排序\n");
printf("4. 简单选择排序\n");
printf("5. 输出学生信息\n");
printf("6. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice){
case 1:
InsertSort(&L);
printf("直接插入排序完成!\n");
break;
case 2:
BInsertSort(&L);
printf("折半插入排序完成!\n");
break;
case 3:
BubbleSort(&L);
printf("冒泡排序完成!\n");
break;
case 4:
SelectSort(&L);
printf("简单选择排序完成!\n");
break;
case 5:
PrintStudent(L);
break;
case 6:
printf("谢谢使用!\n");
return;
default:
printf("输入错误,请重新选择!\n");
break;
}
}
}
int main(){
Menu();
return 0;
}
```
请注意,以上代码仅供参考,需要根据实际情况做出修改。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)