在顺序存储结构实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算。
运行示例:
请输入线性表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("顺序表已满,无法插入! "); } else if (i < 0 || i > L->size) { printf("i must be 0 - %d ", 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("顺序表中已空! "); } else if (i < 0 || i > L->size) { printf("i must be 0 - %d ", 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个位置 ", e, i + 1); return; } } printf("顺序表中没有%d这个元素! ", e); } //显示元素 void ListDisplay(SeqList *L) { int i; for (i = 0; i < L->size; i++) { printf("%d ", L->list[i]); } printf(" "); } //逆置顺序表 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 *** "); ListInit(&La); printf("请输入线性表La的长度:"); scanf("%d", &m); La.size = m; printf("请输入线性表La中的元素(共%d个) ", m); for (i = 0; i < m; i++) { scanf("%d", &La.list[i]); } printf("*** 此时线性表La中的元素 *** "); ListDisplay(&La); printf("*** 插入数据 *** "); printf("请输入要插入的位置:"); scanf("%d", &i); printf("请输入要插入的元素:"); scanf("%d", &e); ListInsert(&La, i, e); printf("*** 此时线性表La中的元素 *** "); ListDisplay(&La); printf("*** 删除数据 *** "); printf("请输入要删除元素的位置:"); scanf("%d", &i); ListDelete(&La, i); printf("*** 此时线性表La中的元素 *** "); ListDisplay(&La); printf("*** 查找数据 ***"); printf("请输入要查找的元素:"); scanf("%d", &e); ListSearch(&La, e); printf("*** 顺序表逆置 *** "); ListReverse(&La); printf("*** 此时线性表La中的元素 *** "); ListDisplay(&La); printf("*** 初始化线性表Lb *** "); ListInit(&Lb); printf("请输入线性表Lb的长度:"); scanf("%d", &n); Lb.size = n; printf("请输入线性表Lb中的元素(共%d个) ", n); for (i = 0; i < n; i++) { scanf("%d", &Lb.list[i]); } printf("*** 此时线性表Lb中的元素 *** "); ListDisplay(&Lb); printf("*** 合并线性表La 和 Lb *** "); ListInit(&Lc); ListMerge(&La, &Lb, &Lc); printf("*** 此时线性表Lc中的元素 *** "); ListDisplay(&Lc); scanf("%d", &e); }