请编制C程序,(1)根据屏幕菜单的选择,进行线性表的建立、数据的插入、删除、查找,并在建立、插入、删除数据后,输出线性表,查找结束后输出查找结果;最后在屏幕菜单中选择0,即可结束程序的运行。 (2)线性表中存储的数据在键盘上输入,线性表中存储的数据类型定义为 struct stu { char sno[20]; (或者long int sno;) char sname[20]; }; 每个同学建立的线性表中要有一个数据是自己的学号和姓名,查找时按照自己的学号进行查找。 (3)线性表的最大存储空间用常量定义,每个算法前要给出适当的注释说明,程序中相应的位置加入输入输出提示语句。
时间: 2024-03-08 18:48:23 浏览: 59
很抱歉,我无法编写和运行实际的代码。但我可以提供一个大致的程序框架和思路,帮助您完成这个任务。
首先,我们需要定义一个结构体来存储学生的信息:
```
struct student {
char sno[20];
char sname[20];
};
```
接下来,我们需要定义一个线性表的结构体,它包含了线性表的容量、当前长度以及存储数据的数组:
```
struct list {
int capacity; // 线性表的最大容量
int length; // 线性表的当前长度
struct student* data; // 存储数据的数组
};
```
在程序运行时,我们可以先让用户输入线性表的最大容量,然后动态分配存储数据的数组:
```
int capacity;
printf("请输入线性表的最大容量:");
scanf("%d", &capacity);
struct list l;
l.capacity = capacity;
l.length = 0;
l.data = (struct student*) malloc(sizeof(struct student) * capacity);
```
接下来,我们需要实现四个基本操作:插入、删除、查找和输出。
对于插入操作,我们需要先检查线性表是否已满,如果已满则不能插入新数据;否则在数组末尾添加一条新数据,并更新线性表的长度:
```
void insert(struct list* l, struct student s) {
if (l->length >= l->capacity) {
printf("线性表已满,无法插入数据!\n");
return;
}
l->data[l->length] = s;
l->length++;
printf("插入数据成功!\n");
}
```
对于删除操作,我们需要先找到要删除的数据在数组中的位置,然后将其后面的所有数据向前移动一个位置,并更新线性表的长度:
```
void delete(struct list* l, char* sno) {
int i, j;
for (i = 0; i < l->length; i++) {
if (strcmp(l->data[i].sno, sno) == 0) {
break;
}
}
if (i == l->length) {
printf("未找到要删除的数据!\n");
return;
}
for (j = i; j < l->length - 1; j++) {
l->data[j] = l->data[j + 1];
}
l->length--;
printf("删除数据成功!\n");
}
```
对于查找操作,我们需要遍历整个数组,找到与输入的学号相同的数据,然后输出该数据的学号和姓名:
```
void search(struct list* l, char* sno) {
int i;
for (i = 0; i < l->length; i++) {
if (strcmp(l->data[i].sno, sno) == 0) {
printf("找到数据:学号:%s,姓名:%s\n", l->data[i].sno, l->data[i].sname);
return;
}
}
printf("未找到数据!\n");
}
```
最后,我们需要实现一个输出函数,它遍历整个数组,输出每条数据的学号和姓名:
```
void output(struct list* l) {
int i;
printf("线性表数据如下:\n");
for (i = 0; i < l->length; i++) {
printf("学号:%s,姓名:%s\n", l->data[i].sno, l->data[i].sname);
}
}
```
在主函数中,我们可以使用一个循环来不断接收用户的操作,直到用户选择了退出程序为止:
```
int main() {
int choice;
struct student s;
char sno[20];
// 初始化线性表
int capacity;
printf("请输入线性表的最大容量:");
scanf("%d", &capacity);
struct list l;
l.capacity = capacity;
l.length = 0;
l.data = (struct student*) malloc(sizeof(struct student) * capacity);
// 循环接收用户的操作
while (1) {
printf("\n请选择操作:\n");
printf("1. 插入数据\n");
printf("2. 删除数据\n");
printf("3. 查找数据\n");
printf("4. 输出数据\n");
printf("0. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入学号:");
scanf("%s", s.sno);
printf("请输入姓名:");
scanf("%s", s.sname);
insert(&l, s);
break;
case 2:
printf("请输入要删除的学号:");
scanf("%s", sno);
delete(&l, sno);
break;
case 3:
printf("请输入要查找的学号:");
scanf("%s", sno);
search(&l, sno);
break;
case 4:
output(&l);
break;
case 0:
printf("程序已退出!\n");
return 0;
default:
printf("无效的操作!\n");
break;
}
}
}
```
以上就是一个简单的线性表程序的框架和思路。您可以根据自己的需求进行修改和完善。
阅读全文