学到的东西就要多看多记。所以我觉得还是应该把自己做过的东西传上来。方便自己的二次学习。
这个程序主要用的是顺序表的操作。没有用链表。
老师提出的要求如下:
1.给出顺序表的存储结构定义。
2.完成顺序表的基本操作函数。
1) 初始化顺序表
2) 分别完成以下两种情况建立顺序表:设给定的数据元素存放在一维数组中;将数据元素从键盘依次输入
3) 输出顺序表的长度
4) 实现按位查找和按值查找
5) 实现插入和删除操作
6) 实现判空和遍历操作
3.编写主函数、各功能函数,实现基本操作,并设置测试数据,测试合法和非法数据的输出结果。
4.程序调试运行并保存输出结果。
5.准备测试数据并准备验收。
代码如下:
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #define MAXSIZE 100 5 6 //查找1.内容2.序号 7 //插入 8 //删除 9 typedef struct student 10 { 11 int num; 12 char name[10]; 13 14 }STU; 15 typedef struct list 16 { 17 STU elem[MAXSIZE]; 18 int last;//最后的下标 19 20 }Seqlist; 21 void denglu(Seqlist *L);//登录函数 22 void chazhao(Seqlist *L);//查找函数 23 void GetData(Seqlist *L);//按值查找 24 void Locate(Seqlist *L);//按内容查找 25 void Print(Seqlist *L);//输出函数 26 void InsList(Seqlist *L);//插入 27 28 void Print(Seqlist *L)//输出函数 29 { 30 system("CLS"); 31 for(int i=0;i<=L->last;i++){ 32 printf("%d %s\n",L->elem[i].num,L->elem[i].name); 33 } 34 denglu(L); 35 } 36 void GetData(Seqlist *L)//按值查找 37 { 38 system("CLS"); 39 int num1; 40 printf("请输入想要查找的序号号码\n"); 41 scanf("%d",&num1); 42 if((num1-1)<0||(num1-1)>L->last){ 43 printf("输入有误请重新输入\n"); 44 GetData(L); 45 } 46 for(int i=0;i<=L->last;i++){ 47 if(num1-1==i){ 48 printf("%d %s\n",L->elem[i].num,L->elem[i].name); 49 denglu(L); 50 } 51 } 52 } 53 void Locate(Seqlist *L)//按内容查找 54 { 55 system("CLS"); 56 char name[10]; 57 printf("请输入你要查找的学生姓名\n"); 58 scanf("%s",name); 59 for(int j=0;j<=L->last;j++){ 60 if(strcmp(name,L->elem[j].name)==0){ 61 printf("%d %s\n",L->elem[j].num,L->elem[j].name); 62 denglu(L); 63 } 64 } 65 printf("没有找到此学生\n"); 66 chazhao(L); 67 68 } 69 void InsList(Seqlist *L)//插入 70 { 71 system("CLS"); 72 int k; 73 int i; 74 printf("请输入要插入到的数据的位置\n"); 75 scanf("%d",&i); 76 if((i<1)||(i>L->last+2)){ 77 printf("插入位置i值不合法\n"); 78 denglu(L); 79 } 80 if(L->last>=MAXSIZE-1){ 81 printf("表已满,无法插入\n"); 82 denglu(L); 83 } 84 printf("请输入要插入的学号及姓名\n"); 85 char name[10]; 86 int ll; 87 scanf("%d",&ll); 88 scanf("%s",name); 89 for(k=L->last;k>=i-1;k--) 90 L->elem[k+1]=L->elem[k]; 91 L->elem[i-1].num=ll; 92 strcpy(L->elem[i-1].name,name); 93 printf("插入成功!\n"); 94 denglu(L); 95 } 96 void DelList(Seqlist *L)//删除 97 { 98 system("CLS"); 99 int k; 100 int i; 101 printf("请输入要删除的数据的编号\n"); 102 scanf("%d",&i); 103 if((i<1)||(i>L->last+1)){ 104 printf("删除位置不合法!\n"); 105 denglu(L); 106 } 107 for(k=i;k<=L->last;k++){ 108 L->elem[k-1]=L->elem[k]; 109 } 110 L->last--; 111 printf("删除成功!\n"); 112 denglu(L); 113 } 114 void chazhao(Seqlist *L) 115 { 116 printf("1.按序号查找\n"); 117 printf("2.按内容查找\n"); 118 printf("3.返回主界面\n"); 119 int aa; 120 scanf("%d",&aa); 121 switch(aa){ 122 case 1:GetData(L); 123 case 2:Locate(L); 124 case 3:denglu(L); 125 default: 126 printf("输入错误请重新输入\n"); 127 chazhao(L); 128 } 129 } 130 131 void denglu(Seqlist *L) 132 { 133 int a; 134 printf("请选择你要做什么\n"); 135 printf("1.查找\n"); 136 printf("2.插入\n"); 137 printf("3.删除\n"); 138 printf("4.打印现有的学生信息\n"); 139 printf("5.退出\n"); 140 scanf("%d",&a); 141 switch(a){ 142 case 1:chazhao(L); 143 case 2:InsList(L); 144 case 3:DelList(L); 145 case 4:Print(L); 146 case 5:printf("谢谢使用\n");exit(0); 147 default: 148 printf("输入错误请重新输入\n"); 149 denglu(L); 150 } 151 } 152 153 154 int main() 155 { 156 Seqlist L; 157 printf("input the lase index of students:\n"); 158 scanf("%d",&L.last); 159 for(int i=0;i<=L.last;i++){ 160 scanf("%d %s",&L.elem[i].num,L.elem[i].name); 161 } 162 printf("输入成功!\n"); 163 denglu(&L); 164 165 return 0; 166 }