赞
踩
数据结构中的顺序表是一种线性表,它使用一段连续的物理空间来存储数据。顺序表中的元素在逻辑上相邻,在物理存储空间中也相邻。顺序表的存储结构具有随机存取的特性,可以支持快速的随机访问,但插入和删除操作需要移动大量元素,效率较低。顺序表通常适用于静态数据集合或对数据访问速度有较高要求的场景。
- //1.创建一个空的顺序表
- seqlist_t* createEmptySeqlist()
- {
- seqlist_t* p = malloc(sizeof(seqlist_t));
- if(p == NULL)
- {
- printf("malloc failed!!\n");
- return NULL;
- }
- p->last = 0;//因为是空的顺序表,有效元素个数初始化为0
- return p;//将malloc申请空间的首地址返回
- }
- 判断顺序表是否为满 表满返回值是1,未满是0
- 当顺序表中有效元素的个数与定义数组最大长度相等即为满表
- //2. 判断顺序表是否为满 表满返回值是1,未满是0
- int isFullSeqlist(seqlist_t* p)
- {
- if(p->last == N)//有效元素个数 == 数组的长度,说明表满
- return 1;
- else
- return 0;
- }
- int insertIntoSeqlist(seqlist_t* p, int post, int x)
- {
- //0. 容错判断
- if(post <= 0 || post > p->last+1 || isFullSeqlist(p))
- {
- printf("insertIntoSeqlist failed!!\n");
- return -1;//通常用-1来表达失败
- }
- //1. 将从插入位置的元素下标到最后一个有效元素整体向后移动一个位置
- //post-1 ----- p->last-1
- int i;
- for(i = p->last-1; i >= post-1; i--)
- p->data[i+1] = p->data[i];
- //2.在插入位置,放上插入的数据x
- p->data[post-1] = x; //post-1得到插入位置的下标
- //3.有效元素个数+1
- p->last++;
- return 0;//代表插入成功
- }
- //4. 遍历顺序表将所有有效元素展示
- void showSeqlist(seqlist_t* p)
- {
- int i;
- for(i = 0; i < p->last; i++)
- {
- printf("%d ", p->data[i]);
- }
- printf("\n");
- }
- //顺序表中有效元素是0个即为空的顺序表
- int isEmptySeqlist(seqlist_t* p)
- {
- return p->last == 0;//判断有效元素个数是否 == 0
- }
- int deleteFromSeqilst(seqlist_t* p, int post)
- {
- //0.容错判断
- if(post <= 0 || post > p->last || isEmptySeqlist(p))
- {
- printf("deleteFromSeqilst failed!!\n");
- return -1;
- }
- //1.将从删除位置的后一个位置的下标到最后一个有效元素,整体向前移动一个位置
- //post ---- p->last-1
- int i;
- for(i = post; i <= p->last-1; i++)
- p->a[i-1] = p->a[i];
- //2.有效元素个数-1
- p->last--;
- return 0;//删除成功
- }
- //查找指定的数据x 在顺序表中的位置
- 遍历整个顺序表的所有有效元素 逐个比较 只要与查找的元素值相等返回下标即可(第一次出现)
- 不存在返回-1
- int searchDataSeqlist(seqlist_t* p, int x)
- {
- int i;
- //遍历有效元素查找
- for(i = 0; i < p->last; i++)
- {
- if(p->data[i] == x)
- return i;//返回值代表的是,元素在数组中的下标
- }
- //如果程序能走到这,说明不存在
- return -1;
- }
- //有效元素个数就是顺序表的长度
- int getLengthSeqlist(seqlist_t* p)
- {
- return p->last;
- }
- //有效元素个数赋值为0即为空表
- void clearSeqlist(seqlist_t* p)
- {
- p->last = 0;
- }
(顺序表清空不是清空数组元素,而是把有效元素个数last置为0)
以上就是顺序表的实现方法,本次代码分享到此结束。后续还会分享数据结构有关知识。
最后的最后,还请大家点点赞,点点关注,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。