MaskerQwQ

实验一 顺序表

Oct 30th, 2022
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.85 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXSIZE=100;
  6.  
  7. typedef struct{
  8.     int *data; //顺序表的基地址
  9.     int length; //顺序表的长度
  10.     int size;   //顺序表的空间大小
  11. }SqList;
  12.  
  13. //初始化
  14. bool InitList(SqList &L){
  15.     L.data=new int[MAXSIZE]; //为顺序表分配MAXSIZE个空间
  16.     if(!L.data){
  17.         return false;
  18.     }
  19.     L.length=0;
  20.     L.size=MAXSIZE;
  21.     return true;
  22. }
  23. //追加新元素
  24. bool ListAdd(SqList &L,int e){
  25.     if(L.length==MAXSIZE){
  26.         return false;
  27.     }
  28.     L.data[L.length]=e;
  29.     L.length++;
  30.     return true;
  31. }
  32. //插入(位置插入)
  33. bool ListInsert(SqList &L,int i,int e){
  34.     if(L.length==MAXSIZE){ //表满了
  35.         return false;
  36.     }
  37.     if(i<1||i>=L.length){ //i不在范围内
  38.         return false;
  39.     }
  40.     if(i<=L.length){
  41.         for(int j=L.length;j>=i-1;j--){
  42.             L.data[j+1]=L.data[j];
  43.         }
  44.     }
  45.     L.data[i-1]=e;
  46.     L.length++;
  47.     return true;
  48. }
  49.  
  50. //删除(位置删除)
  51. bool ListDelete(SqList &L,int i){
  52.     int e=L.data[i-1];
  53.     cout<<"删除的元素为:"<<e<<endl;
  54.     if(i<0||i>=L.length){
  55.         return false;
  56.     }
  57.     if(i==L.length-1){
  58.         L.length--;
  59.         return true;
  60.     }  
  61.     for(int j=i;j<L.length;j++){
  62.         L.data[j-1]=L.data[j];
  63.     }
  64.     L.length--;
  65.     return true;
  66. }
  67. //删除(值删除)
  68. bool ListDeleteValue(SqList &L,int v){
  69.     for(int i=0;i<L.length;i++){
  70.         if(L.data[i]==v){
  71.             for(int j=i;j<L.length-1;j++){
  72.                 L.data[j]=L.data[j+1];
  73.             }
  74.             L.length--;
  75.         }
  76.     }
  77.     return true;
  78. }
  79. //逆转
  80. bool ListReverse(SqList &L){
  81.     if(L.length==0){
  82.         return false;
  83.     }
  84.     for(int i=0,j=L.length-1;i<L.length/2;i++,j--){
  85.         swap(L.data[i],L.data[j]);
  86.     }
  87.     return true;
  88. }
  89.  
  90. //输出
  91. bool ListOutput(SqList &L){
  92.     if(L.length==0){
  93.         cout<<"当前表为空表"<<endl;
  94.         return false;
  95.     }
  96.     cout<<"当前的顺序表为:";
  97.     for(int i=0;i<L.length;i++){
  98.         cout<<L.data[i]<<" ";
  99.     }
  100.     cout<<endl;
  101.     return true;
  102. }
  103.  
  104. //销毁
  105. bool ListDestory(SqList &L){
  106.     if(L.data){
  107.         delete[]L.data;
  108.     }
  109.     L.length=0;
  110.     L.size=0;
  111.     cout<<"顺序表已销毁"<<endl;  
  112. }
  113.  
  114. //置空表
  115. bool ListEmpty(SqList &L){
  116.     for(int i=0;i<MAXSIZE;i++){
  117.         L.data[i]=0;
  118.     }
  119.     L.length=0;
  120.     return true;
  121. }
  122.  
  123. //求表长
  124. bool ListLength(SqList &L){
  125.     cout<<"当前表长为:"<<L.length<<endl;
  126.     return true;
  127. }
  128.  
  129. //查找元素
  130. bool ListSearch(SqList &L,int x){
  131.     int flag=0;
  132.     if(L.length==0){
  133.         return false;
  134.     }
  135.     for(int i=0;i<L.length;i++){
  136.         if(L.data[i]==x){
  137.             cout<<"此元素在顺序表的第"<<i+1<<"位"<<endl;
  138.             flag=1;
  139.             break;
  140.         }
  141.     }
  142.     if(flag==0){
  143.         cout<<"未能找到此元素"<<endl;
  144.     }
  145.     return true;
  146. }
  147.  
  148. //判断顺序表是否为空
  149. bool ListIsEmpty(SqList &L){
  150.     if(L.length==0){
  151.         cout<<"顺序表为空表"<<endl;
  152.     }else{
  153.         cout<<"顺序表不为空表"<<endl;
  154.     }
  155.     return true;
  156. }
  157.  
  158. //实现顺序表元素的逆转
  159. bool ListReverseElem(SqList &L,int i,int j){
  160.     if(L.length==0){
  161.         return false;
  162.     }
  163.     swap(L.data[i],L.data[j]);
  164.     return true;
  165. }
  166.  
  167. int main(){
  168.     SqList List;
  169.     cout<<"1.创建空表"<<endl;
  170.     cout<<"2.追加新元素"<<endl;
  171.     cout<<"3.插入新元素(在第i位插入)"<<endl;
  172.     cout<<"4.删除元素(位置删除)"<<endl;
  173.     cout<<"5.删除元素(值删除)"<<endl;
  174.     cout<<"6.逆转"<<endl;
  175.     cout<<"7.销毁"<<endl;
  176.     cout<<"8.置空表"<<endl;
  177.     cout<<"9.求表长"<<endl;
  178.     cout<<"10.查找元素"<<endl;
  179.     cout<<"11.判断顺序表是否为空"<<endl;
  180.     cout<<"12.实现顺序表元素逆转"<<endl;
  181.     cout<<"13.退出"<<endl;
  182.     cout<<"请输入将要进行的操作编号:"<<endl;
  183.     int option;
  184.     cin>>option;
  185.     while(option!=13){
  186.         switch(option){
  187.             case 1:
  188.                 InitList(List);
  189.                 ListOutput(List);
  190.                 break;
  191.             case 2:
  192.                 int add;
  193.                 cin>>add;
  194.                 ListAdd(List,add);
  195.                 ListOutput(List);
  196.                 break;
  197.             case 3:
  198.                 int pi,n;
  199.                 cout<<"输入你要插入的值位置和数值:";
  200.                 cin>>pi>>n;
  201.                 ListInsert(List,pi,n);
  202.                 ListOutput(List);
  203.                 break;
  204.             case 4:
  205.                 int pd;
  206.                 cout<<"输入你要删除的元素位置:";
  207.                 cin>>pd;
  208.                 ListDelete(List,pd);
  209.                 ListOutput(List);
  210.                 break;
  211.             case 5:
  212.                 int va;
  213.                 cout<<"输入你要删除的元素值:";
  214.                 cin>>va;
  215.                 ListDeleteValue(List,va);
  216.                 ListOutput(List);
  217.                 break;
  218.             case 6:
  219.                 ListReverse(List);
  220.                 ListOutput(List);
  221.                 break;
  222.             case 7:
  223.                 ListDestory(List);
  224.                 ListOutput(List);
  225.                 break;
  226.             case 8:
  227.                 ListEmpty(List);
  228.                 ListOutput(List);
  229.                 break;
  230.             case 9:
  231.                 ListOutput(List);
  232.                 ListLength(List);
  233.                 break;
  234.             case 10:
  235.                 int u;
  236.                 cout<<"输入你要找的元素:";
  237.                 cin>>u;
  238.                 ListOutput(List);
  239.                 ListSearch(List,u);
  240.                 break;
  241.             case 11:
  242.                 ListOutput(List);
  243.                 ListIsEmpty(List);
  244.                 break;
  245.             case 12:
  246.                 int p1,p2;
  247.                 cout<<"请输入你要逆转的两个元素位置:";
  248.                 cin>>p1>>p2;
  249.                 ListReverseElem(List,p1-1,p2-1);
  250.                 cout<<"逆转后的顺序为:";
  251.                 ListOutput(List);  
  252.                 break;
  253.         }
  254.         cin>>option;
  255.     }
  256.     return 0;
  257. }
  258.  
  259.  
  260.  
  261.  
Add Comment
Please, Sign In to add comment