資料結構實驗1

SuouYuki發表於2024-10-22

  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 }

 

相關文章