LV03-04-数据结构-线性表-顺序表操作
本文主要是数据结构——顺序表的一些基础操作,如增删改查等的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
linux内核 | linux-4.15(NXP官方提供) |
STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
参考方向 | 参考原文 |
--- | --- |
这一部分主要是对顺序表各种操作的实现,例如顺序表的创建,插入,显示,删除,释放,去重等操作。
一、顺序表的创建
1.创建步骤
【注意】
(1) L->last 的值代表了 data[N] 中最后一个有效数据的下标,后边的图会用箭头来指示,但是它并不是指针,若将 L->last 加上 1 ,就可以得到数组有效元素的个数。
(2)创建线性表的时候用到了 malloc 和 memset 两个函数,需要加上两个函数对应的头文件。
2.函数实现
1 | /** |
二、顺序表的释放
1.释放步骤
【注意】
(1)释放的时候直接释放顺序表结构体指针变量指向的内存空间即可。
(2)可以判断一下要释放的顺序表是否存在。
2.函数实现
1 | /** |
三、顺序表的长度
1.求表长度步骤
从上图可以看出,其实整个顺序表的长度是顺序表结构体成员 last 来决定的,它决定了顺序表中有效数据元素的个数,只要它是 -1,就代表顺序表中没有数据,即便是顺序表中的数据有一个值,但是我们依然认为这是一个空表。
【注意】为了使 last 成员可以和数组最后一个元素的下表对应,设置了初始的 last 成员为 -1,所以 last + 1 才是实际有效元素个数。
2.函数实现
1 | /** |
四、顺序表的空满
1.空满判定步骤
【注意】顺序表 L 的空满由 L->last 成员决定,而非是顺序表数组成员中存储了多少个数据,
判断条件 | 说明 |
---|---|
L->last = -1 | 认为顺序表为空 |
L->last = N - 1 | 认为顺序表为满 |
2.函数实现
2.1顺序表为空判定
1 | /** |
2.2顺序表为满判定
1 | /** |
五、顺序表的清空
1.清空步骤
【注意】对于顺序表来说,里边是否存放了元素,存放了多少个元素是由顺序表中代表顺序表有效元素个数的 last 成员决定的。
判断条件 | 说明 |
---|---|
L->last = -1 | 认为顺序表为空 |
L->last = N - 1 | 认为顺序表为满 |
所以,对于顺序表的清空,我们只需要将 L->last 赋值为 -1 ,就可以认为此顺序表已经清空。
2.函数实现
1 | /** |
六、顺序表数据插入
1.数据插入步骤
如上图所示,我们分为头部插入,尾部插入和中间插入,分析过后,其实可以归结为一类,就是在指定位置插入数据,头部和尾部的时候是两种特殊性情况,但是处理方式就可以与中间插入的这种普遍情况一样。一般步骤如下:
2.函数实现
1 | /** |
七、顺序表数据删除
1.删除步骤
有上图可知,我们删除顺序表指定位置数据的时候只需要将该位置后边所有元素前移一个位置即可,一般步骤如下:
2.函数实现
1 | /** |
八、顺序表数据显示
1.数据显示步骤
对于数据的显示,我们就像对数组遍历一样,遍历整个顺序表,然后打印出数据即可。
2.函数实现
1 | /** |
九、顺序表数据查找
1.查找步骤
对于顺序表中数据元素的查找,我们直接遍历整个顺序表,查看数据是否存在于顺序表中即可,若是有重复的数据,我们只返回首个出现的下标。
2.函数实现
1 | /** |
十、顺序表数据去重
1.数据去重步骤
【思路】
对于去重,我们这里使用的方式是从第二个数据开始(下标为 1 ),逐个与前边的数据相比较,若发现与前边的某个数据重复,则将该数据删除,也就是将当前数据后边的数据逐个左移,覆盖当前数据,然后重复比较,直至到顺序表结尾。
【注意】若有重复,原本 i+1 位置的元素补到第 i 个位置,此时 i 位置上的元素需要再进行比较,所以 i 不需要往后移;若没有重复,内层循环退出后,j 的值小于 0 ,只有在此种情况下 i 才需要往后移动。
2.函数实现
1 | /** |
十一、顺序表数据合并
1.数据合并步骤
- (1)在 L1 中查找 L2 中的每个数据;
- (2)若 L1 中已有,则继续下一个的查找,若 L1 中没有,则将此数据插入到 L1 后边。
2.函数实现
1 | /** |
十二、完整程序
1. seqlist.c
点击查看详情
1 | /** ===================================================== |
2. seqlist.h
点击查看详情
1 | /** ===================================================== |
3. Makefile
点击查看详情
1 | ##============================================================================# |
4. main.c
点击查看详情
1 |
|