用线性表顺序存储结构实现键盘输入学生信息(包括学号和成绩),学号为0作为结束标志,建立其对应的线性表并输出数据,实现增,删,改,查的基本功能,用c语言写全部代码
时间: 2024-03-11 21:48:24 浏览: 71
好的,下面是实现代码:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 //定义线性表的最大长度
typedef struct {
int id;
int score;
} Student; //定义学生结构体
typedef struct {
Student data[MAXSIZE];
int length;
} SeqList; //定义线性表结构体
//初始化线性表
void initList(SeqList *list) {
list->length = 0;
}
//遍历线性表
void traverseList(SeqList *list) {
int i;
printf("\n学号\t成绩\n");
for(i = 0; i < list->length; i++) {
printf("%d\t%d\n", list->data[i].id, list->data[i].score);
}
}
//插入数据
void insertList(SeqList *list, int pos, Student stu) {
int i;
if(pos < 1 || pos > list->length+1) {
printf("插入位置有误!\n");
return;
}
if(list->length == MAXSIZE) {
printf("线性表已满,无法插入!\n");
return;
}
for(i = list->length-1; i >= pos-1; i--) {
list->data[i+1] = list->data[i];
}
list->data[pos-1] = stu;
list->length++;
}
//删除数据
void deleteList(SeqList *list, int pos) {
int i;
if(pos < 1 || pos > list->length) {
printf("删除位置有误!\n");
return;
}
for(i = pos; i < list->length; i++) {
list->data[i-1] = list->data[i];
}
list->length--;
}
//修改数据
void modifyList(SeqList *list, int pos, Student stu) {
if(pos < 1 || pos > list->length) {
printf("修改位置有误!\n");
return;
}
list->data[pos-1] = stu;
}
//查找数据
int searchList(SeqList *list, int id) {
int i;
for(i = 0; i < list->length; i++) {
if(list->data[i].id == id) {
return i+1;
}
}
return 0;
}
//主函数
int main() {
SeqList list;
Student stu;
int choice, pos, id, i;
initList(&list);
while(1) {
printf("\n------------------------\n");
printf("1.插入数据\n");
printf("2.删除数据\n");
printf("3.修改数据\n");
printf("4.查找数据\n");
printf("5.遍历数据\n");
printf("0.退出程序\n");
printf("------------------------\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch(choice) {
case 0:
printf("程序已退出!\n");
exit(0);
case 1:
printf("请输入要插入的学号和成绩:");
scanf("%d %d", &stu.id, &stu.score);
insertList(&list, list.length+1, stu);
printf("插入成功!\n");
break;
case 2:
printf("请输入要删除的位置:");
scanf("%d", &pos);
deleteList(&list, pos);
printf("删除成功!\n");
break;
case 3:
printf("请输入要修改的位置和新的学号和成绩:");
scanf("%d %d %d", &pos, &stu.id, &stu.score);
modifyList(&list, pos, stu);
printf("修改成功!\n");
break;
case 4:
printf("请输入要查找的学号:");
scanf("%d", &id);
pos = searchList(&list, id);
if(pos) {
printf("该学生的位置为:%d\n", pos);
} else {
printf("查找失败!\n");
}
break;
case 5:
traverseList(&list);
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
注意事项:
1. 本代码仅实现了顺序存储结构的线性表,如果要实现其他存储结构的线性表,需要进行相应的修改;
2. 为了简化代码,本代码没有进行输入数据的合法性检查,实际应用中需要注意;
3. 本代码中的操作都是基本操作,如果需要实现更高级的功能,可以根据需要进行扩展。
阅读全文