用结构体,实现了线性表初始化,删除索引的元素,查找元素,销毁线性表空间。
- #include
- #include
- #define error -1
- #define ok 1
-
-
- typedef unsigned unit;
- typedef int eleType;
-
- //定义一个结构体,用来存线性表的属性
- typedef struct {
- eleType * element;//定义一个元素类型指针
- unit length;
- unit listsize;
- }arrayList;
-
- //初始化一个线性表,给定线性表的可容纳元素的总个数
- arrayList array_init(unit len){
- arrayList t; // 构造一个结构体,类型是arrayList
- //分配一块堆内存空间,用来存储线性表
- t.element=(eleType *)malloc(len* sizeof(eleType)); //element是线性表元素所在内存的指针
- t.length = 0; //初始元素个数为0
- t.listsize = len;
- return t;
- };
-
- //顺序表的输出,按顺序遍历线性表,打印出来其中的每一个元素
- void print_array(arrayList t){
- printf("the array elements are:\n");
- int i;
- for (i=0;i
- printf("%d\n",t.element[i]);
- };
- };
-
- //顺序表的取值,根据下标取值,如果下标不合法,返回一个错误值。如果下标合法,返回下标对应的值
- eleType get_element(arrayList t,unit index){
- if (index
- printf("the index is out range");
- return -1;
- }
- return t.element[index];
- }
-
- // 顺序表的查找,从左到右,遍历顺序表,比较元素与所给元素是否相等,如果相等就返回该索引
- int find_element(arrayList t,eleType elem){
- int index;
- for (index=0;index
- if (elem==t.element[index]){
- return index;
- }
- }
- return -1;
- }
-
- //顺序表的销毁
- int arrayList_destroy(arrayList *t){
- if (NULL == t){
- return error;
- }
- if (t->element != NULL){
- free(t->element);
- t->length=0;
- t->listsize=0;
- }
- return ok;
- }
-
- //删除指定位置的元素,先判定索引是否合法,如果不合法,返回错误。
- // 如果合法,把指定元素删除后,i+1到length-1的索引元素往前移动一位。线性表长度-1
- int locate_element_delete(arrayList *t,unit index){
- if (NULL == t)
- return error;
- if (index > t->length-1){
- printf("index out range");
- return error;
- }
- int i;
- for (i=index;i
length-1;i++){ - t->element[i]=t->element[i+1];
- }
- t->length = t->length -1;
- return ok;
- }
-
-
- int main()
- { arrayList t;//构造一个结构体
- t = array_init(20);//初始化结构体
- int i=0; //往线性表里赋值
- for (i;i<10;i++){
- t.element[i]=100+i;
- t.length++;
- }
- //打印出线性表中的元素
-
- locate_element_delete(&t,3);
- /* int j=0;
- for (j;j
- printf("%d ",t.element[j]);
- }
- printf("%d",t.length);
- */
-
- return 0;
- }
- 删除指定元素
- 线性表扩容
- 在指定索引出插入元素
- #define error -1
- #define ok 1
-
- //删除指定的元素值,指定的元素值可能有多个重复的元素,要遍历整个列表长度
- int delete_designated_element(arrayList *t,unit elem){
- if (NULL == t){
- return error;
- }
- int index=0;
- while (index !=t->length-1){
- if (t->element[index] != elem){
- index++;
- continue;
- }
- //查找到相同的元素,从这个元素之后的所有元素往前移动一位
- //指针index不要+1,后边移位来的元素可能还是要删除的元素,但是列表的长度要-1
- int i=index;
- for (i;i
length-1;i++){ - t->element[i]=t->element[i+1];
- }
- t->length--;
- }
- return ok;
- }
-
- //线性表扩容成原来2倍
- int expand(arrayList *t){
- if (NULL == t){
- return error;
- }
- t->listsize *=2;//为顺序表分配新的空间
- t->element = (eleType *)realloc(t->element,t->listsize* sizeof(eleType));
- return ok;
- }
-
- //在指定索引处插入一个元素
- int element_insert(arrayList *t, int index,int elem){
- if (NULL == t)
- {
- printf("[%s %d] SqList is NULL\n", __FUNCTION__ , __LINE__);
- return error;
- }
- //判断插入的位置是否合法
- if (index > t->length)
- return error;
-
- //判断顺序表是否满了,如果满了则扩容
- if (t->length == t->listsize)
- {
- expand(&t);
- }
- int i=0;
- for (i;i
length-index;i++){ - //从最后一个元素开始,往后移动一位
- t->element[t->length-i]=t->element[t->length-i-1];
- }
- t->element[index] = elem;
- t->length++;
- return ok;
- }
-
相关阅读:
四旋翼无人机学习第8节--OpenMV电路分析
在HBuilder X中ElementUI框架的搭建
vue3-vant4-vite-pinia-axios-less学习日记
Java-校验规则Integer使用 @NotEmpty注解报错
jdk中bin目录详解
python3:print()打印. 2023-11-18
idea常用快捷键持续更新
面试算法37:小行星碰撞
想转行做IC,却找不到适合自己的岗位?
Vue项目的详细目录结构解析
-
原文地址:https://blog.csdn.net/m0_64407685/article/details/128040821