线性表的基本操作(插入,删除,查找)
学到的东西就要多看多记。所以我觉得还是应该把自己做过的东西传上来。方便自己的二次学习。
这个程序主要用的是顺序表的操作。没有用链表。
老师提出的要求如下:
1.给出顺序表的存储结构定义。
2.完成顺序表的基本操作函数。
1) 初始化顺序表
2) 分别完成以下两种情况建立顺序表:设给定的数据元素存放在一维数组中;将数据元素从键盘依次输入
3) 输出顺序表的长度
4) 实现按位查找和按值查找
5) 实现插入和删除操作
6) 实现判空和遍历操作
3.编写主函数、各功能函数,实现基本操作,并设置测试数据,测试合法和非法数据的输出结果。
4.程序调试运行并保存输出结果。
5.准备测试数据并准备验收。
代码如下:
#include <cstdio> #include <cstring> #include <cstdlib> #define MAXSIZE 100 //查找1.内容2.序号 //插入 //删除 typedef struct student { int num; char name[10]; }STU; typedef struct list { STU elem[MAXSIZE]; int last;//最后的下标 }Seqlist; void denglu(Seqlist *L);//登录函数 void chazhao(Seqlist *L);//查找函数 void GetData(Seqlist *L);//按值查找 void Locate(Seqlist *L);//按内容查找 void Print(Seqlist *L);//输出函数 void InsList(Seqlist *L);//插入 void Print(Seqlist *L)//输出函数 { system("CLS"); for(int i=0;i<=L->last;i++){ printf("%d %s\n",L->elem[i].num,L->elem[i].name); } denglu(L); } void GetData(Seqlist *L)//按值查找 { system("CLS"); int num1; printf("请输入想要查找的序号号码\n"); scanf("%d",&num1); if((num1-1)<0||(num1-1)>L->last){ printf("输入有误请重新输入\n"); GetData(L); } for(int i=0;i<=L->last;i++){ if(num1-1==i){ printf("%d %s\n",L->elem[i].num,L->elem[i].name); denglu(L); } } } void Locate(Seqlist *L)//按内容查找 { system("CLS"); char name[10]; printf("请输入你要查找的学生姓名\n"); scanf("%s",name); for(int j=0;j<=L->last;j++){ if(strcmp(name,L->elem[j].name)==0){ printf("%d %s\n",L->elem[j].num,L->elem[j].name); denglu(L); } } printf("没有找到此学生\n"); chazhao(L); } void InsList(Seqlist *L)//插入 { system("CLS"); int k; int i; printf("请输入要插入到的数据的位置\n"); scanf("%d",&i); if((i<1)||(i>L->last+2)){ printf("插入位置i值不合法\n"); denglu(L); } if(L->last>=MAXSIZE-1){ printf("表已满,无法插入\n"); denglu(L); } printf("请输入要插入的学号及姓名\n"); char name[10]; int ll; scanf("%d",&ll); scanf("%s",name); for(k=L->last;k>=i-1;k--) L->elem[k+1]=L->elem[k]; L->elem[i-1].num=ll; strcpy(L->elem[i-1].name,name); printf("插入成功!\n"); denglu(L); } void DelList(Seqlist *L)//删除 { system("CLS"); int k; int i; printf("请输入要删除的数据的编号\n"); scanf("%d",&i); if((i<1)||(i>L->last+1)){ printf("删除位置不合法!\n"); denglu(L); } for(k=i;k<=L->last;k++){ L->elem[k-1]=L->elem[k]; } L->last--; printf("删除成功!\n"); denglu(L); } void chazhao(Seqlist *L) { printf("1.按序号查找\n"); printf("2.按内容查找\n"); printf("3.返回主界面\n"); int aa; scanf("%d",&aa); switch(aa){ case 1:GetData(L); case 2:Locate(L); case 3:denglu(L); default: printf("输入错误请重新输入\n"); chazhao(L); } } void denglu(Seqlist *L) { int a; printf("请选择你要做什么\n"); printf("1.查找\n"); printf("2.插入\n"); printf("3.删除\n"); printf("4.打印现有的学生信息\n"); printf("5.退出\n"); scanf("%d",&a); switch(a){ case 1:chazhao(L); case 2:InsList(L); case 3:DelList(L); case 4:Print(L); case 5:printf("谢谢使用\n");exit(0); default: printf("输入错误请重新输入\n"); denglu(L); } } int main() { Seqlist L; printf("input the lase index of students:\n"); scanf("%d",&L.last); for(int i=0;i<=L.last;i++){ scanf("%d %s",&L.elem[i].num,L.elem[i].name); } printf("输入成功!\n"); denglu(&L); return 0; }