一、实验名称:顺序表的基本操作
二、实验目的:
1、掌握顺序表的定义;
2、掌握顺序表的基本操作,如建立、查找、插入和删除等。
三、实验原理:
四、实验仪器:Devc++
五、实验内容与步骤:
定义一个包含学生信息(学号,姓名,成绩)的的顺序表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
六、代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
#define OVERFLOW -2
#define OK 1
typedef int Status;
int os=0;
typedef struct
{
char no[8];
char name[20];
int score;
}Student;
typedef struct
{
Student * elem;
int length;
}SqList;
Status InitList(SqList * L){
int i;//循环变量
L->elem = new Student[MAXSIZE];
if(!L->elem) exit(OVERFLOW);
L->length = 0;
printf("请输入学生人数:");
scanf("%d",&L->length);
printf("请输入学生信息:学号 姓名 成绩\n");
for(i=0;ilength;i++){
scanf("%s %s %d",L->elem[i].no,L->elem[i].name,&L->elem[i].score);
os++;
}
return OK;
}
Status A(SqList *L){//创建学生
int i;
for(i=0;ilength;i++)
if(strcmp("\0",L->elem[i].name)!=0)
printf("%s %s %d\n",L->elem[i].no,L->elem[i].name,L->elem[i].score);
else
printf("表内无数据,请先创建学生!\n");
}
Status B(SqList *L,char a[]){//列出学生信息
int i;
for(i=0;ilength;i++)
if(strcmp(a,L->elem[i].name)==0)
printf("%s %s %d\n",L->elem[i].no,L->elem[i].name,L->elem[i].score);
//ilength if(strcmp(a,L->elem[i].name)==0))
/*
101 李 100
102 张 200
*/
}
Status C(SqList *L,int i){//查找学生
if(strcmp("\0",L->elem[i].name)!=0)
printf("%s %s %d\n",L->elem[i].no,L->elem[i].name,L->elem[i].score);
else
printf("查无此人\n");
}
Status D(SqList *L){//添加学生
int a,i;
printf("请输入要添加的学生数量:");
scanf("%d",&a);
printf("请输入学生信息:学号 姓名 成绩\n");
for(i=0;ielem[L->length].no,L->elem[L->length].name,&L->elem[L->length].score);
++L->length;
}
}
int Del(SqList *L,int i){//删除学生
if ((i<1)||(i>L->length)) exit;
for(;ilength-1;i++)
L->elem[i]=L->elem[i+1];
--L->length;
printf("删除完毕\n");
}
Status E(SqList *L){
int choice,i;
char a[8];
printf("请选择删除的方式:\n1.按学号删除\n2.按姓名删除\n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("请输入要删除的学号:");
scanf("%s",&a);
for(i=0;ilength;i++)
if(strcmp(L->elem[i].no,a)==0){
printf("删除:%d\n",i);
Del(L,i);
}
break;
case 2:
printf("请输入要删除的姓名:");
scanf("%s",&a);
for(i=0;ilength;i++)
if(strcmp(a,L->elem[i].name)==0){
printf("删除:%d\n",i);
Del(L,i);
}
else printf("0");
break;
/* case 3://按编号删除
printf("请输入要删除的编号:");
scanf("%s",&a);
Del(L,i);
break;*/
default:
break;
}
}
void Menu(void)
{
printf("----顺序表------\n");
printf("1 创建学生信息\n");
printf("2 显示学生信息\n");
printf("3 按姓名查询\n");
printf("4 按位置查找\n");
printf("5 添加\n");
printf("6 删除\n");
printf("0 退出\n");
}
int main()
{
int choice,i;
char a[20];
SqList list;
Menu();
while(1)
{
printf("请选择菜单: ");
scanf("%d",&choice);
if(os==0&&choice!=1)
printf("请先添加学生!\n");
else
switch(choice){
case 1:
InitList(&list);
break;
case 2:
A(&list);
break;
case 3:
printf("请输入姓名:");
scanf("%s",&a);
B(&list,a);
break;
case 4:
printf("请输入位置:");
scanf("%d",&i);
C(&list,i);
break;
case 5:
D(&list);
break;
case 6:
E(&list);
break;
default:
break;
}
if(choice == 0)
{
break;
}
}
return 0;
}
版权属于:晓沉
本文链接:https://moexc.com/code/2022-ds1.html
转载时须注明出处及本声名,除特殊说明,原创内容采用CC BY-NC-SA 4.0进行许可