数据结构实验1
1 //1.线性表顺序表的初始化ok 2 //2.输出ok,插入ok,删除ok,逆转ok,销毁ok,置空表ok(两种插入,两种删除) 3 //3.求表长ok,查找元素ok,判断是否为空ok 4 //4.实现顺序表元素的逆转并输出结果ok 5 //5.顺序表合并:动态创建两个有序的顺序表,输出合并后的顺序表 6 #include<cstdio> 7 #include<cstdlib> 8 #include<algorithm> 9 #include<iostream> 10 #include<iomanip> 11 using namespace std; 12 #define MAXSIZE 100 13 14 typedef int status;//状态 15 typedef int ElemType;//数据类型 16 17 //定义函数头 18 typedef struct { 19 ElemType data[MAXSIZE]; 20 int length; 21 22 }SqList;//顺序表 23 24 //初始化线性表 25 void InitList(SqList* L) 26 { 27 L->length = 0; 28 } 29 30 //创建线性表 输入初始元素 31 void CreateList(SqList* L, ElemType a[], int n) 32 { 33 for (int i = 0; i < n; i++) 34 { 35 L->data[i] = a[i]; 36 L->length++; 37 } 38 } 39 40 //输出线性表中元素 41 void PrintList(SqList* L) 42 { 43 for (int i = 0; i < L->length; i++) 44 { 45 cout << L->data[i] << setw(2); 46 } 47 putchar('\n'); 48 } 49 50 //释放线性表(置空) 51 void Free(SqList* L) 52 { 53 free(L); 54 printf("Have Free!\n"); 55 } 56 57 //删除线性表 58 status DelList(SqList* L, ElemType n) 59 { 60 int i; 61 if (n<1 || n>L->length) 62 return 0; 63 else { 64 for (i = n - 1; i <= L->length - 2; i++) 65 { 66 L->data[i] = L->data[i + 1]; 67 } 68 L->length--; 69 return 1; 70 } 71 } 72 //判断表是否为空 73 status Listempty(SqList* L) 74 { 75 return (L->length == 0); 76 } 77 //输出线性表长度 78 void Listlen(SqList* L) 79 { 80 cout << (L->length) << endl; 81 } 82 //表中插入元素 83 status InsList(SqList* L, int j, ElemType k) 84 { 85 int i; 86 if (j > L->length + 1 || j < 0) 87 return 0; 88 else 89 { 90 for (i = L->length-1;i>=j-1;i--) 91 { 92 L->data[i + 1] = L->data[i]; 93 } 94 L->data[i + 1] = k; 95 L->length++; 96 return 1; 97 } 98 } 99 //线性表元素查找 100 void Locate(SqList* L, int y) 101 { 102 int i, j = 0; 103 for (i = 0; i < L->length; i++) 104 { 105 if (L->data[i] == y)j = i + 1; 106 } 107 if (j == 0)printf("没有找到该元素\n"); 108 else printf("%d是第%d个元素\n",y,j); 109 } 110 //线性表逆转 111 void Swap(ElemType* a, ElemType* b) 112 { 113 ElemType temp = *a; 114 *a = *b; 115 *b = temp; 116 } 117 void Reverse(SqList* L) 118 { 119 for (int i = 0; i < L->length / 2; i++) 120 { 121 Swap(&L->data[i], &L->data[L->length - 1 - i]); 122 } 123 } 124 //排序 125 void SortList(SqList* L) 126 { 127 for (int i = 0; i < L->length-1; i++) 128 { 129 for (int j = 0; j < L->length -1- i; j++) 130 { 131 if (L->data[j] > L->data[j + 1]) 132 { 133 ElemType temp = L->data[j]; 134 L->data[j] = L->data[j + 1]; 135 L->data[j + 1] = temp; 136 } 137 } 138 } 139 } 140 //主函数 141 int main() 142 { 143 int n; 144 ElemType a[MAXSIZE]; 145 printf("输入元素个数:"); 146 cin >> n; 147 printf("输入元素:"); 148 for (int i = 0; i < n; i++) 149 cin >> a[i];//输入元素 150 sort(a, a + n);//排序 151 SqList* L; 152 L = (SqList*)malloc(sizeof(SqList));//申请空间 153 InitList(L);//创建表 154 cout << "空表已创建" << endl; 155 CreateList(L, a, n);//追加元素 156 printf("元素已加入表中\n"); 157 printf("输出元素:\n"); 158 PrintList(L);//输出元素 159 printf("线性表长度:"); 160 Listlen(L);//输出线性表长度 161 //插入 162 int loc, flag, member; 163 printf("输入插入位置和元素:"); 164 cin >> loc >> member; 165 flag = InsList(L, loc, member); 166 if (flag == 1) 167 { 168 printf("输出元素:\n"); 169 PrintList(L);//输出线性表 170 printf("线性表长度:"); 171 Listlen(L);//输出线性表长度 172 } 173 if (flag == 0) 174 printf("插入错误!\n"); 175 //删除 176 int place; 177 printf("请输入要删除的位置:"); 178 cin >> place; 179 flag = DelList(L, place); 180 if (flag == 1) 181 { 182 printf("输出元素:\n"); 183 PrintList(L);//输出线性表 184 printf("线性表长度:"); 185 Listlen(L);//输出线性表长度 186 } 187 if (flag == 0) 188 printf("删除失败!\n"); 189 //判空 190 if (Listempty(L)) 191 cout << "Empty" << endl; 192 else 193 cout << "Not Empty" << endl; 194 int y; 195 printf("请输入要查找的数y:"); 196 cin >> y; 197 Locate(L, y);//线性表查找 198 //逆转顺序表 199 Reverse(L); 200 printf("逆转输出元素:\n"); 201 PrintList(L);//输出线性表 202 printf("线性表长度:"); 203 Listlen(L);//输出线性表长度 204 Free(L);//置空 205 SqList* L1,*L2,*L3; 206 L1 = (SqList*)malloc(sizeof(SqList));//申请空间 207 L2 = (SqList*)malloc(sizeof(SqList));//申请空间 208 L3 = (SqList*)malloc(sizeof(SqList));//申请空间 209 InitList(L1);//创建表 210 cout << "空表L1已创建" << endl; 211 printf("输入L1元素,检测到-1停止:"); 212 int la=0,num1=0; 213 while (la != -1) 214 { 215 cin >> la; 216 if (la != -1) 217 { 218 L1->data[num1] = la; 219 num1++; 220 L1->length++; 221 } 222 } 223 InitList(L2);//创建表 224 cout << "空表L2已创建" << endl; 225 printf("输入L2元素,检测到-1停止:"); 226 int lb = 0, num2 = 0; 227 while (lb != -1) 228 { 229 cin >> lb; 230 if (lb != -1) 231 { 232 L2->data[num2] = lb; 233 num2++; 234 L2->length++; 235 } 236 } 237 InitList(L3);//创建表 238 cout << "空表L3已创建" << endl; 239 int cnt=0; 240 for (int i = 0; i < L1->length; i++) 241 { 242 L3->data[i] = L1->data[i]; 243 L3->length++; 244 cnt++; 245 } 246 for (int i = 0; i < L2->length; i++) 247 { 248 if (cnt > MAXSIZE) 249 { 250 printf("超出!\n"); 251 break; 252 } 253 L3->data[cnt] = L2->data[i]; 254 cnt++; 255 L3->length++; 256 } 257 //排序 258 SortList(L3); 259 PrintList(L3);//输出线性表 260 //lemType la[MAXSIZE], lb[MAXSIZE], lc[MAXSIZE]; 261 return 0; 262 }