C++实现数据结构实验顺序表全部代码

it2024-10-17  40

数据结构实验顺序表

具体代码

具体代码

#include<bits/stdc++.h> #include <stdio.h> #include <iostream> using namespace std; int LC = 0; typedef int listMax; typedef int status; //顺序表的创建 typedef struct{ listMax *elem; int length; }List,*L; List La; List La1; List Lb; List Lb1; List Lc; status initlist(int n,List &L){ L.elem = new listMax[n]; L.length = n; if (L.elem == NULL) exit (0); return 1; } //结束 void end(){ printf("本次实验结束!\n下次再见!"); } //赋值 status listvalue(int t,List &L) { int cut = 1; int c; for(int i = 0;i < t;i++){ cin>>c; L.elem[i]=c; cut++; } if (cut == t) exit(0); return 1; } //输出 void listinprint(List L){ for(int i = 0;i < L.length;i++){ printf("%d ",L.elem[i]); } printf("\n\n"); } //警告信息 void pig(){ printf("猪头!看清楚再输入啊!\n"); } //插入 status listinsert(List &L,int g){ int i,e; printf("请输入您要插入的位置!"); while(1){ cin>>i; if(1 <= i && i <= L.length){ printf("请输入您要插入的元素!"); cin>>e; for(int j = L.length-1;j >= i-1;j--) L.elem[j+1] = L.elem[j]; L.elem[i-1] = e; L.length++; printf("已完成操作:在第%d个位置插入%d!\n",i,e); printf("新的顺序表为:"); if (g == 1) listinprint(La); else if (g == 2) listinprint(Lb); else listinprint(Lc); break; }else pig(); } return 1; } //删除 status listdelet(List &L,int g){ int i,r; int x = 0; printf("请输入您要删除的元素!"); while(1){ cin>>i; for(int j = 0;j <= L.length; j++){ if(i == L.elem[j]) { r = j; x++; } } if (x) break; else pig(); } for(int j = r;j <= L.length-1;j++) L.elem[j]=L.elem[j+1]; L.length--; printf("已完成操作:删除元素%d\n",i); printf("新的顺序表为:"); if(g == 1) listinprint(La); else if (g == 2) listinprint(Lb); else listinprint(Lc); return 1; } //反转 void inverse(List &L,int g){ int e; for(int i = 0;i < (L.length/2);i++){ e = L.elem[L.length-1-i]; L.elem[L.length-1-i] = L.elem[i]; L.elem[i] = e; } printf("已完成操作:反转顺序表!\n"); printf("新的顺序表为:"); if(g == 1) listinprint(La); else if(g == 2) listinprint(Lb); else listinprint(Lc); } //排序 void sort(List &L){ int e; for(int i = 0;i < L.length;i++){ for(int j = i;j < L.length;j++){ if(L.elem[i] > L.elem[j]){ e = L.elem[j]; L.elem[j] = L.elem[i]; L.elem[i] = e; } } } } //合并 void MergeList(List La,List Lb,List &Lc){ Lc.length = La.length + Lb.length; Lc.elem = new listMax[La.length + Lb.length]; for(int len=0,i=0,j=0;len<Lc.length;len++){ if(i==La.length){ Lc.elem[len]=Lb.elem[j]; j++; continue; } if(j==Lb.length){ Lc.elem[len]=La.elem[i]; i++; continue; } if(La.elem[i]>Lb.elem[j]){ Lc.elem[len]=Lb.elem[j]; j++; }else{ Lc.elem[len]=La.elem[i]; i++; } } printf("操作成功!顺序表La与Lb合并完成!\n"); printf("合并后的顺序表Lc为:\n"); listinprint(Lc); LC++; } //选择器 int select(int p){ int g; printf("请输入您要操作的数组前的序号!\n"); printf("(1)La数组\n"); printf("(2)Lb数组\n"); if (LC == 1) printf("(3)Lc数组\n"); while(1){ cin>>g; if(g == 1 || g == 2){ if(p == 0){ if(g == 1) listinprint(La); else if(g == 2) listinprint(Lb); }else if(p == 1){ if(g == 1) listinsert(La,g); else if(g == 2) listinsert(Lb,g); } else if(p == 2){ if(g == 1) listdelet(La,g); else if(g == 2) listdelet(Lb,g); } else if(p == 3){ if(g == 1) inverse(La,g); else if(g == 2) inverse(Lb,g); } }else if(g == 3){ if(LC){ switch(p){ case 0:listinprint(Lc); break; case 1: listinsert(Lc,g); break; case 2: listdelet(Lc,g); break; case 3: inverse(Lc,g); break; } }else pig(); } else pig(); break; } return 1; } //操作菜单 int menu(){ int d=0; printf("选择您想要执行的后续操作!\n"); printf("输入(0)执行输出算法!\n"); printf("输入(1)执行插入算法!\n"); printf("输入(2)执行删除算法!\n"); printf("输入(3)执行反转算法!\n"); printf("输入(4)执行合并算法!\n"); printf("输入(5)退出本程序!\n"); while(1){ cin>>d; if(d == 0){ select(0); menu(); }else if(d == 1) { select(1); menu(); } else if(d == 2){ select(2); menu(); } else if(d == 3){ select(3); menu(); } else if(d == 4){ La1 = La; Lb1 = Lb; sort(La1); sort(Lb1); MergeList(La1,Lb1,Lc); menu(); } else if(d == 5){ end(); break; } else pig(); } return 0; } int main(){ int n,m,f; printf("数据结构实验一:顺序表的基本操作\n"); //La的创建! printf("请输入顺序表La的长度\n"); cin>>n; bool t1 = initlist(n,La); if(t1) printf("顺序表La已创建,长度为%d\n",n); printf("请输入%d个正整数以存放在顺序表La中\n",n); f = listvalue(n,La); if(f) printf("成功为顺序表La赋值\n"); printf("顺序表La的值为\n"); listinprint(La); //Lb的创建 printf("请输入顺序表Lb的长度\n"); cin>>m; bool t2 = initlist(m,Lb); if(t2) printf("顺序表Lb已创建,长度为%d\n",m); printf("请输入%d个正整数以存放在顺序表Lb中\n",m); f = listvalue(m,Lb); if(f) printf("成功为顺序表Lb赋值\n"); printf("顺序表Lb的值为\n"); listinprint(Lb); //菜单 printf("您已成功创建两个顺序表,解锁高级关卡!\n"); menu(); return 0; }
最新回复(0)