1 #include<iostream> 2 #define Max 50 3 using namespace std; 4 typedef char ElemType; 5 6 typedef struct 7 { 8 ElemType data[Max]; 9 int length; 10 }sqlist; 11 12 //1.初始化线性表 13 void initsqlist(sqlist *&L) 14 { 15 L=new sqlist; 16 L->length=0; 17 } 18 //2.销毁线性表 19 void destroylist(sqlist *&L) 20 { 21 delete L; 22 } 23 //3.判断线性表是否为空表 24 bool listempty(sqlist *L) 25 { 26 if(0==L->length) 27 return true; 28 else 29 return false; 30 } 31 //4.求线性表的长度 32 int listlength(sqlist *L) 33 { 34 return (L->length); 35 } 36 //5.输出线性表 37 void displist(sqlist *L) 38 { 39 if(listempty(L)) 40 return; 41 for(int i=0;i<L->length;i++) 42 cout<<L->data[i]<<" "; 43 cout<<endl; 44 } 45 //6.求某个数据元素值 46 bool getelem(sqlist *L,int i,ElemType &e) 47 { 48 if(i<1 || i>L->length) 49 return false; 50 e=L->data[i-1]; 51 return true; 52 } 53 //7.按元素值查找 54 int locateelem(sqlist *L,ElemType e) 55 { 56 int i=0; 57 while(i<L->length && L->data[i]!=e) 58 i++; 59 if(i>=L->length) 60 return 0; 61 else 62 return i+1; 63 } 64 //8.插入数据 65 bool listInsert(sqlist *&L,int i,ElemType e) 66 { 67 if(i<1 || i>L->length+1) //注意这里 length要+1 极易出错 68 return false; 69 i--; 70 for(int j=L->length;j>i;j--) 71 L->data[j]=L->data[j-1]; 72 L->data[i]=e; 73 L->length++; 74 return true; 75 } 76 //9.删除数据 77 bool listdelete(sqlist *L,int i,ElemType &e) 78 { 79 if(i<1 || i>L->length) 80 return false; 81 i--; 82 e=L->data[i]; 83 for(int j=i;j<L->length-1;j++) 84 L->data[j]=L->data[j+1]; 85 L->length--; 86 return true; 87 } 88 89 int main() 90 { 91 sqlist *L1; 92 cout<<"1.初始化顺序表:";initsqlist(L1); 93 94 cout<<" 2.插入数据:"<<endl; 95 ElemType a[5]={'a','b','c','d','e'}; 96 for(int i=0;i<5;i++) 97 if(!listInsert(L1,i+1,a[i])) 98 cout<<a[i]<<"插入失败"; 99 100 cout<<" 3.输出顺序表:";displist(L1); 101 102 cout<<" 4.输出顺序表的长度:"<<listlength(L1); 103 104 cout<<" 5.判断顺序表是否为空:"; 105 if(listempty(L1)) 106 cout<<" 该顺序表为空"; 107 else 108 cout<<" 该顺序表不为空"; 109 110 int k; 111 ElemType temp; 112 cout<<" 6.请选择要输出第几个元素:";cin>>k; 113 if(getelem(L1,k,temp)) 114 cout<<" 取值成功,该顺序表的第"<<k<<"个元素为:"<<temp; 115 else 116 cout<<" 取值失败,你输入的位置"<<k<<"越界"; 117 118 119 cout<<" 7.请选择在哪个位置上插入你想要的元素:" ;cin>>k; 120 cout<<" 8.请输入你想要插入的元素:" ;cin>>temp; 121 listInsert(L1,k,temp); 122 cout<<" 9.输出新的顺序表:"; 123 displist(L1); 124 125 cout<<" 10.请选择你想要删除的元素的位置:";cin>>k; 126 if(listdelete(L1,k,temp)) 127 cout<<" 删除成功!删除的元素是:"<<temp<<endl; 128 else 129 cout<<" 删除失败"<<endl; 130 131 cout<<" 11.输出新的顺序表:"; 132 displist(L1); 133 134 cout<<" 12.释放顺序表"; 135 destroylist(L1); 136 137 }