/* 顺序表示的线性表——顺序表 定义:线性表是由n个相同类型的数据元素组成的有限序列。线性表的数据 元素具有序偶关系,即数据元素之间具有一定次序。 线性表按照储存方式可以分成顺序储存和链式储存。线性表的顺序储存是指 将线性表中的元素储存在一组连续的储存单元中。例如数组。 顺序表的特点有:逻辑上相邻的元素在物理上也是相邻的。线性表的顺序储 存结构是一种随机存取的储存结构。 */ // 以整型数据储存为例 # include <stdio.h> # include <malloc.h> # include <stdlib.h> // 储存结构 struct arry { int * p; // 数组第一个元素地址 int len; // 数组长度 int cnt; // 数组有效数字个数 }; void Create_Arry(struct arry *); // 数组的创建 void Init_Arry(struct arry *); // 数组的初始化 void Arry_Input(struct arry *); // 数组数据的输入 void Show_Arry(struct arry *); // 数组的遍历 bool Is_Empty(struct arry *); // 判断数组是否为空 bool Is_Full(struct arry *); // 判断数组是否满 void Delete_Arry(struct arry *, int); // 删除数组元素 void Destory_Arry(struct arry *); // 数组的销毁 void Add_Arry(struct arry *, int); // 追加元素 void Find_In_Arry(struct arry *, int); // 在数组中查找某个元素 int main(void) { struct arry arr; // 数组的创建 Create_Arry(&arr); // 数组的初始化 Init_Arry(&arr); // 数组数据的输入 Arry_Input(&arr); // 数组遍历 Show_Arry(&arr); int pos; printf("请输入您想要销毁的元素位置:"); scanf("%d", &pos); Delete_Arry(&arr, pos); Show_Arry(&arr); int val; printf("请输入您想要追加的元素的值:"); scanf("%d", &val); Add_Arry(&arr, val); Show_Arry(&arr); int i; printf("请输入您想查找的值! "); scanf("%d", &i); Find_In_Arry(&arr, i); Destory_Arry(&arr); return 0; } // 数组的创建 void Create_Arry(struct arry * arry) { printf("请输入您需要的数组最大长度:"); scanf("%d", &arry->len); arry->p = (int *)malloc((arry->len) * sizeof(int)); return; } // 数组的初始化 void Init_Arry(struct arry * arr) { arr->cnt = 0; return; } // 数组数据的输入 void Arry_Input(struct arry * arry) { int cnt; printf("请输入您想赋值的元素个数:"); scanf("%d", &cnt); if (cnt > arry->len) { printf("您需要输入的数值的个数大于数组长度,输入失败! "); exit(-1); } int i; for (i = 0; i < cnt; ++i) { printf("请输入第%d个数组元素的值:", i+1); scanf("%d", &arry->p[i]); } arry->cnt = cnt; return; } // 数组的遍历 void Show_Arry(struct arry * arry) { if (Is_Empty(arry)) printf("数组为空,无数据可输出! "); else { int i; for (i = 0; i < arry->cnt; ++i) { printf("%d ", arry->p[i]); } printf(" "); } return; } // 判断是否为空 bool Is_Empty(struct arry * arry) { if (0 == arry->cnt) return true; else return false; } // 判断数组是否满 bool Is_Full(struct arry * arry) { if (arry->cnt == arry->len) return true; else return false; } // 销毁数组中某个元素 void Delete_Arry(struct arry * arry, int pos) { int val; if (pos > arry->cnt+1) { printf("数组中不存在该元素! "); exit(-1); } val = arry->p[pos-1]; for (int i = pos-1; i < arry->cnt; ++i) arry->p[i] = arry->p[i+1]; // 销毁某个元素后,有效数字个数要减一 arry->cnt -= 1; printf("销毁成功,您销毁的元素是%d ", val); return; } // 追加元素 void Add_Arry(struct arry * arry, int val) { if (Is_Full(arry)) { printf("数组已满,无法再添加元素! "); exit(-1); } arry->p[arry->cnt] = val; arry->cnt += 1; return; } // 在数组中查找某个元素 void Find_In_Arry(struct arry * arry, int val) { int pos; for (pos = 0; pos < arry->cnt; ++pos) { if (val == arry->p[pos]) break; } if (pos = arry->cnt) { printf("您查找的数值不存在! "); exit(-1); } else printf("您查找的元素在数组的第%d位! ", pos+1); return; } // 数组的销毁 void Destory_Arry(struct arry * arry) { free(arry->p); arry->p = NULL; return; }