用c++定义一个可以存放学生元素的有序顺序表。其中学生元素中包含两个数据项:姓名、成绩。注意顺序表以学生成绩有序存放。要求完成一个程序,能添加、删除学生元素,并显示顺序表中所有元素。
时间: 2024-06-12 22:05:18 浏览: 74
以下是一个基本的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
typedef struct {
char name[20];
int score;
} Student;
typedef struct {
Student data[MAX_STUDENTS];
int length;
} SeqList;
void initList(SeqList *list) {
list->length = 0;
}
int locateElem(SeqList *list, char name[]) {
int i;
for (i = 0; i < list->length; i++) {
if (strcmp(list->data[i].name, name) == 0) {
return i;
}
}
return -1;
}
void insertElem(SeqList *list, Student stu) {
int i, j;
for (i = 0; i < list->length; i++) {
if (stu.score > list->data[i].score) {
break;
}
}
for (j = list->length; j > i; j--) {
list->data[j] = list->data[j-1];
}
list->data[i] = stu;
list->length++;
}
void deleteElem(SeqList *list, char name[]) {
int i, pos;
pos = locateElem(list, name);
if (pos == -1) {
printf("学生 %s 不存在!\n", name);
return;
}
for (i = pos; i < list->length-1; i++) {
list->data[i] = list->data[i+1];
}
list->length--;
printf("学生 %s 已删除!\n", name);
}
void displayList(SeqList *list) {
int i;
printf("--------------------\n");
printf("姓名\t成绩\n");
for (i = 0; i < list->length; i++) {
printf("%s\t%d\n", list->data[i].name, list->data[i].score);
}
printf("--------------------\n");
}
int main() {
SeqList list;
initList(&list);
while (1) {
printf("请选择操作:\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 显示列表\n");
printf("4. 退出程序\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: {
printf("请输入学生姓名:");
char name[20];
scanf("%s", name);
printf("请输入学生成绩:");
int score;
scanf("%d", &score);
Student stu = {name, score};
insertElem(&list, stu);
printf("学生 %s 已添加!\n", name);
break;
}
case 2: {
printf("请输入学生姓名:");
char name[20];
scanf("%s", name);
deleteElem(&list, name);
break;
}
case 3: {
displayList(&list);
break;
}
case 4: {
printf("程序已退出!\n");
exit(0);
}
default: {
printf("无效的选择!\n");
break;
}
}
}
return 0;
}
```
这个程序中,我们定义了两个结构体:`Student` 表示学生,包含 `name` 和 `score` 两个成员;`SeqList` 表示顺序表,包含一个 `data` 数组和 `length` 成员表示当前元素个数。
然后,我们实现了一些基本的操作函数:
- `initList` 初始化顺序表;
- `locateElem` 查找指定姓名的学生在顺序表中的位置;
- `insertElem` 在顺序表中插入一个学生元素,要保持顺序表有序;
- `deleteElem` 删除顺序表中指定姓名的学生元素;
- `displayList` 显示顺序表中所有学生元素。
最后,在 `main` 函数中,我们用一个循环来接受用户输入的操作,分别调用上述函数。
阅读全文