1 #include<iostream> 2 #include<stdio.h> 3 4 #define MAXSIZE 100 5 #define OVERFLOW -2 6 #define ERROR 0 7 #define OK 1 8 9 using namespace std; 10 11 typedef struct squList 12 { 13 int *elem; 14 int length; 15 }SqList; 16 17 //初始化 18 int Init(SqList *L) 19 { 20 L->elem=new int[MAXSIZE]; 21 if(! L->elem) 22 { 23 exit(OVERFLOW); //存储分配失败 exit(0)---结束程序 24 } 25 int n,i=0; 26 cout<<"请输入顺序表元素个数"<<endl; 27 cin>>n; 28 while(i<n) 29 { 30 cin>>L->elem[i++]; 31 } 32 return (L->length=i+1); 33 cout<<"输出顺序表为:"<<endl; 34 } 35 36 //判断是否为空 37 void IsEmpty(SqList *L) 38 { 39 if(L->length) 40 cout<<"序列不为空"<<endl; 41 else 42 cout<<"序列为空"<<endl; 43 } 44 45 //输出序列 46 void print(SqList &L) 47 { 48 int i; 49 for(i=0;i<L.length-1;i++) 50 cout<<L.elem[i]<<" "; 51 cout<<endl; 52 } 53 54 //插入元素 55 int InsList(SqList *L) 56 { 57 int i,k; 58 cout<<"请输入要插入元素的位置i和元素值k"<<endl; 59 cin>>i>>k; 60 if((i<1) || (i>L->length+1)) 61 { 62 printf("插入位置i值不合法"); 63 return ERROR; 64 } 65 if(L->length>= MAXSIZE-1) 66 { 67 printf("表已满无法插入"); 68 return ERROR; 69 } 70 for(int j=L->length;j>=i-1;j--) 71 L->elem[j+1]=L->elem[j]; 72 L->elem[i-1]=k; 73 L->length++; 74 print(*L); 75 return OK; 76 } 77 78 //删除元素 79 int DelList(SqList *L) 80 { 81 int i,k; 82 cout<<"请输入要删除元素的位置i"<<endl; 83 cin>>i; 84 if((i<1)||(i>L->length+1)) 85 { 86 cout<<"删除位置不合法!删除失败"<<endl; 87 return ERROR; 88 } 89 for(k=i; k<=L->length; k++) 90 L->elem[k-1] = L->elem[k]; 91 92 L->length--; 93 cout<<"删除后的顺序表为"<<endl; 94 print(*L); 95 return OK; 96 } 97 98 //取表中第m个元素 99 void GetElem( SqList *L) 100 { 101 int m; 102 cout<<"请输入所取元素的序号"<<endl; 103 cin>>m; 104 if (m<1 || m>L->length+1) 105 cout<<"你所输入的元素序号不合理"<<endl; 106 else 107 cout<<"第"<<m<<"位元素的值为:"<<L->elem[m - 1]<<endl; 108 } 109 //查找元素的序号 110 int Locate(SqList *L) 111 { 112 int a; 113 int i=0; 114 cout<<"请输入要查找的元素值a"<<endl; 115 cin>>a; 116 while ((i<=L->length)&&(L->elem[i]!=a)) 117 i++; 118 if (i<=L->length) 119 cout<<"元素"<<a<<"的序号为"<<i+1<<endl; 120 else 121 cout<<"未找到元素"<<a<<endl; 122 } 123 124 //改变元素值 125 int Change(SqList *L) 126 { 127 int i,k; 128 cout<<"请输入要修改的元素的位置i和要替换的值k"<<endl; 129 cin>>i>>k; 130 if((i<1)||(i>L->length)) 131 { 132 cout<<"修改位置不合法!修改失败"<<endl; 133 return ERROR; 134 } 135 L->elem[i-1]=k; 136 cout<<"修改后的顺序表为"<<endl; 137 print(*L); 138 return OK; 139 } 140 141 void merge(SqList *LA, SqList *LB, SqList *LC)//合并 142 { 143 int i,j,k; 144 i=0;j=0;k=0; 145 while(i<=LA->length&&j<=LB->length) 146 if(LA->elem[i]<=LB->elem[j]) 147 { 148 LC->elem[k]= LA->elem[i]; 149 i++; 150 k++; 151 } 152 else 153 { 154 LC->elem[k]=LB->elem[j]; 155 j++; 156 k++; 157 } 158 while(i<=LA->length) 159 { 160 LC->elem[k]= LA->elem[i]; 161 i++; 162 k++; 163 } 164 while(j<=LB->length) 165 { 166 LC->elem[k]= LB->elem[j]; 167 j++; 168 k++; 169 } 170 LC->length=LA->length+LB->length+1; 171 } 172 173 int main() 174 { 175 SqList L,L1,L2; 176 int e; 177 178 cout<<"初始化顺序表:"<<endl; 179 //初始化 180 Init(&L); 181 print(L); 182 183 //在位置i处插入元素b 184 InsList(&L); 185 186 //删除 187 DelList(&L); 188 189 //修改 190 Change(&L); 191 192 //查找 193 Locate(&L); 194 195 //取对应位置元素 196 GetElem(&L); 197 198 //判空 199 IsEmpty(&L); 200 201 cout<<"对L1、L2进行初始化操作:"<<endl; 202 Init(&L1); 203 Init(&L2); 204 cout<<"L1,L2,L合并后为:"<<endl; 205 merge(&L1,&L2,&L); 206 print(L); 207 return 0; 208 }