定义数据结构,借助for循环和插入算法编写一段程序,逐个输入学生信息,按成绩由高到低形成有序线性表(需要在插入过程中完成排序)。分别输出所建立线性表的数据域和last值。
时间: 2024-02-25 13:55:36 浏览: 58
好的,我可以帮您解决这个问题。下面是一个示例程序,可以实现您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 100 // 最大学生数
// 定义学生结构体
typedef struct {
char name[20];
int score;
} Student;
// 定义线性表结构体
typedef struct {
Student data[MAX_STUDENTS];
int last;
} List;
// 插入算法,按照成绩从高到低排序
void insert(List *list, Student student) {
int i;
for (i = 0; i <= list->last && student.score <= list->data[i].score; i++);
for (int j = list->last; j >= i; j--) {
list->data[j+1] = list->data[j];
}
list->data[i] = student;
list->last++;
}
int main() {
List list = { .last = -1 };
Student student;
int n;
printf("请输入学生数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名和成绩:", i+1);
scanf("%s%d", student.name, &student.score);
insert(&list, student);
}
printf("有序线性表的数据域:\n");
for (int i = 0; i <= list.last; i++) {
printf("%s %d\n", list.data[i].name, list.data[i].score);
}
printf("last值为:%d\n", list.last);
return 0;
}
```
在程序中,我们首先定义了一个 `Student` 结构体,来表示学生的姓名和成绩。然后定义了一个 `List` 结构体,来表示线性表,其中包含一个 `data` 数组来存储学生信息,以及一个 `last` 变量来表示线性表的最后一个元素的下标。
在 `insert` 函数中,我们使用了插入排序的思想,将新的学生信息插入到合适的位置上,从而维护了一个按成绩从高到低排序的有序线性表。
在 `main` 函数中,我们首先根据输入的学生数,使用循环逐个输入学生信息,并将其插入到线性表中。最后输出线性表的数据域和 `last` 值。
希望这个程序可以帮到您!
阅读全文