线性表的基本操作(插入,删除,查找)

            学到的东西就要多看多记。所以我觉得还是应该把自己做过的东西传上来。方便自己的二次学习。

            这个程序主要用的是顺序表的操作。没有用链表。

老师提出的要求如下:

1.给出顺序表的存储结构定义。

2.完成顺序表的基本操作函数。

            1)      初始化顺序表

            2)      分别完成以下两种情况建立顺序表:设给定的数据元素存放在一维数组中;将数据元素从键盘依次输入

            3)      输出顺序表的长度

            4)      实现按位查找和按值查找

            5)      实现插入和删除操作

            6)      实现判空和遍历操作

3.编写主函数、各功能函数,实现基本操作,并设置测试数据,测试合法和非法数据的输出结果。

4.程序调试运行并保存输出结果。

5.准备测试数据并准备验收。

代码如下:

  1 #include 
  2 #include 
  3 #include 
  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 }

 

转载于:https://www.cnblogs.com/xzt6/p/5888567.html

你可能感兴趣的:(数据结构与算法)