在順序存儲結構實現基本操作:初始化、創建、插入、刪除、查找、遍歷、逆置、合並運算。
運行示例:
請輸入線性表La的長度:5 請輸入線性表La中的元素(共5個) 1 3 5 7 9 *** 此時線性表La中的元素 *** 1 3 5 7 9 *** 插入數據 *** 請輸入要插入的位置:3 請輸入要插入的元素:8888 *** 此時線性表La中的元素 *** 1 3 8888 5 7 9 *** 刪除數據 *** 請輸入要刪除元素的位置:2 *** 此時線性表La中的元素 *** 1 8888 5 7 9 *** 查找數據 ***請輸入要查找的元素:3 順序表中沒有3這個元素! *** 順序表逆置 *** *** 此時線性表La中的元素 *** 9 7 5 8888 1 *** 初始化線性表Lb *** 請輸入線性表Lb的長度:5 請輸入線性表Lb中的元素(共5個) 2 4 6 8 0 *** 此時線性表Lb中的元素 *** 2 4 6 8 0 *** 合並線性表La 和 Lb *** *** 此時線性表Lc中的元素 *** 2 4 6 8 0 9 7 5 8888 1
//######################################################### // 順序表上的基本操作實現 // 初始化、創建、插入、刪除、查找、遍歷、逆置、合並 //######################################################### #define _CRT_SECURE_NO_DEPRECATE #include<stdio.h> #define MAX_SIZE 100 typedef int ElemType; //定義結構體SeqList typedef struct { ElemType list[MAX_SIZE]; int size; } SeqList; //初始化順序表 void ListInit(SeqList *L) { //定義初始元素的個數 L->size = 0; } //插入數據元素 void ListInsert(SeqList *L, int i, ElemType e) { int j; if (L->size >= MAX_SIZE) { printf("順序表已滿,無法插入!\n"); } else if (i < 0 || i > L->size) { printf("i must be 0 - %d\n", L->size); } else { for (j = L->size; j > i - 1; j--) { L->list[j] = L->list[j - 1]; } L->list[i - 1] = e; L->size++; } } //刪除數據元素 void ListDelete(SeqList *L, int i) { int j = 0; if (L->size <= 0) { printf("順序表中已空!\n"); } else if (i < 0 || i > L->size) { printf("i must be 0 - %d\n", L->size); } else { for (j = i; j <= L->size - 1; j++) { L->list[j - 1] = L->list[j]; } L->size--; } } //查找數據元素 void ListSearch(SeqList *L, ElemType e) { int i; for (i = 0; i < L->size; i++) { if (L->list[i] == e) { printf("%d在順序表中第%d個位置\n", e, i + 1); return; } } printf("順序表中沒有%d這個元素!\n", e); } //顯示元素 void ListDisplay(SeqList *L) { int i; for (i = 0; i < L->size; i++) { printf("%d\t", L->list[i]); } printf("\n"); } //逆置順序表 void ListReverse(SeqList *L) { int i; ElemType temp; for (i = 0; i < (L->size / 2); i++) { temp = L->list[i]; L->list[i] = L->list[L->size - i - 1]; L->list[L->size - i - 1] = temp; } } //合並數據表 void ListMerge(SeqList *L1, SeqList *L2, SeqList *L3) { int i = 0, j = 0, k = 0; while (i < L1->size&&j < L2->size) { if (L1->list[i] < L2->list[j]) { L3->list[k] = L1->list[i]; i++; k++; } else { L3->list[k] = L2->list[j]; j++; k++; } } while (i < L1->size) { L3->list[k++] = L1->list[i++]; } while (j < L2->size) { L3->list[k++] = L1->list[j++]; } L3->size = k; } int main() { SeqList La, Lb, Lc; int i, e; int m, n; printf("*** 初始化線性表La ***\n"); ListInit(&La); printf("請輸入線性表La的長度:"); scanf("%d", &m); La.size = m; printf("請輸入線性表La中的元素(共%d個)\n", m); for (i = 0; i < m; i++) { scanf("%d", &La.list[i]); } printf("*** 此時線性表La中的元素 ***\n"); ListDisplay(&La); printf("*** 插入數據 ***\n"); printf("請輸入要插入的位置:"); scanf("%d", &i); printf("請輸入要插入的元素:"); scanf("%d", &e); ListInsert(&La, i, e); printf("*** 此時線性表La中的元素 ***\n"); ListDisplay(&La); printf("*** 刪除數據 ***\n"); printf("請輸入要刪除元素的位置:"); scanf("%d", &i); ListDelete(&La, i); printf("*** 此時線性表La中的元素 ***\n"); ListDisplay(&La); printf("*** 查找數據 ***"); printf("請輸入要查找的元素:"); scanf("%d", &e); ListSearch(&La, e); printf("*** 順序表逆置 ***\n"); ListReverse(&La); printf("*** 此時線性表La中的元素 ***\n"); ListDisplay(&La); printf("*** 初始化線性表Lb ***\n"); ListInit(&Lb); printf("請輸入線性表Lb的長度:"); scanf("%d", &n); Lb.size = n; printf("請輸入線性表Lb中的元素(共%d個)\n", n); for (i = 0; i < n; i++) { scanf("%d", &Lb.list[i]); } printf("*** 此時線性表Lb中的元素 ***\n"); ListDisplay(&Lb); printf("*** 合並線性表La 和 Lb ***\n"); ListInit(&Lc); ListMerge(&La, &Lb, &Lc); printf("*** 此時線性表Lc中的元素 ***\n"); ListDisplay(&Lc); scanf("%d", &e); }