大二第一次数据结构实验
-顺序表SqList
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
//定义元素
typedef struct{
char name[20];
char numb[10];
double scroe;
}student;
typedef student ElemType;
//顺序表的创建
typedef struct
{
ElemType *elem;
int length;
}SqList;
//顺序表的初始化
Status InitList(SqList &L){
L.elem = new ElemType[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length = 0;
return OK;
}
//顺序表的查找
Status Search(SqList &L,char str[])
{
for(int i=0 ; i<=L.length ; i++)
if(strcmp(L.elem[i].name,str)==0)
return i+1;
return 0;
}
//顺序表的取值
ElemType GetElem(SqList L,int i)
{
return L.elem[i-1];
}
//顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e){
int j;
if((i<1)||(i>L.length+1)) return ERROR;
if(L.length==MAXSIZE) return ERROR;
for(j=L.length-1 ; j>=i-1 ; j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}
//顺序表的删除
Status ListDelete(SqList &L,int i){
int j;
if((i<1)||(i>L.length)) return ERROR;
for(j=i;j<=L.length-1;j++)
L.elem[j-1] = L.elem[j];
--L.length;
return OK;
}
void Input(ElemType *e){
printf("请输入学生的姓名:");
scanf("%s",e->name);
printf("请输入学生的学号:") ;
scanf("%s",e->numb);
printf("请输入学生的成绩:");
scanf("%lf",&e->scroe);
printf("输入完成\n\n");
}
void Output(ElemType *e)
{
printf("姓名:%s\n学号:%s\n成绩:%.2lf\n\n",e->name,e->numb,e->scroe);
}
int main(){
SqList L;
ElemType a,b,e,c,d;
int n,x,s,m,h,isDel;
char str[20];
do{
puts(" *******************************");
puts("");
puts(" 选项1:构造线性表,录入学生信息");
puts(" 选项2: 显示所有学生信息");
puts(" 选项3:根据姓名进行查找学生信息");
puts(" 选项4:根据指定的位置返回学生信息");
puts(" 选项5:把学生插入到表中指定的位置");
puts(" 选项6:删除指定位置的学生记录");
puts(" 选项7:统计表中学生个数");
puts(" 选项0:退出");
puts("");
puts(" *******************************");
printf("请输入选项前的数字:");
scanf("%d",&n);
puts("");
switch(n){
case 0:break;
case 1:
if(InitList(L))
printf("成功建立顺序表\n\n");
else
printf("顺序表建立失败\n\n");
printf("请输入要录入学生的人数:");
scanf("%d",&x);
for(int i=0;i<x;i++)
{
printf("第%d个学生:\n",i+1);
Input(&L.elem[i]);
}
L.length=x;
puts("");
break;
case 2:
printf("全部学生信息:\n\n");
for(int i=1;i<=L.length;i++)
{
a=GetElem(L,i);
Output(&a);
}
break;
case 3:
printf("请输入姓名:");
scanf("%s",str);
Search(L,str);
if(Search(L,str))
Output(&L.elem[Search(L,str)-1]);
else
puts("对不起,查无此人");
puts("");
break;
case 4:
printf("请输入位置:");
scanf("%d",&s);
b=GetElem(L,s);
Output(&b);
break;
case 5:
printf("请输入要插入的位置:");
scanf("%d",&m);
Input(&c);
if(ListInsert(L,m,c)){
printf("插入成功!查看全部学生请输入2");
break;
}
else{
printf("插入失败\n");
}
break;
case 6:
printf("请输入要删除学生信息的位置");
scanf("%d",&h);
printf("被删除学生的信息为\n");
Output(&L.elem[h-1]);
puts("确认是否永久删除,(1表示是,0表示撤销)请输入:");
scanf("%d",&isDel);
if(isDel){
if(ListDelete(L,h))
printf("删除成功!\n");
else
printf("删除失败!\n");
}
else if(!isDel)
printf("撤销成功!");
break;
case 7:
printf("当前信息系统共有%d名学生!",L.length);
}
}while(n);
return 0;
}