当前位置: 首页 > news >正文

顺序表专题

目录

一.创建3个文件

二.顺序表分类

1.静态顺序表

2.动态顺序表

三.初始化

3.1头文件中:

3.2源文件中:

3.3测试文件中:

四.空间释放

4.1头文件中:

4.2源文件中

4.3测试文件中

五.尾插

5.1头文件:

5.2源文件:

5.3测试文件:

六.头插

6.1头文件中:

6.2源文件中:

6.3测试文件:

七.打印

7.1头文件:​编辑

7.2源文件:

7.3测试文件:

八.尾删

8.1头文件:​编辑

8.2源文件:

8.3测试文件:​编辑

九.头删

9.1头文件

9.2源文件

9.3测试文件


一.创建3个文件

1.分别是 头文件SeqList.h    源文件SeqList.c    测试文件test.c

2.分别的作用/负责内容:

  • 头文件SeqList.h:定义顺序表结构,声明顺序表方法
  • 源文件SeqList.c:实现顺序表方法
  • 测试文件test.c:进行测试

二.顺序表分类

1.静态顺序表

  • 顺序表结构有:定长数组,有效数据

2.动态顺序表

  • 顺序表结构有:指针,有效数据,空间大小

tip:优先使用动态顺序表。原因:更灵活,可以动态的申请空间。

因为:空间大了,会导致 资源浪费;空间小了,会导致 资源不够。

注意:动态顺序表中,进行每一部分操作都得分别一一测试,不可所有写完整体测试!易混淆。

三.初始化

3.1头文件中:

解释:

  • Typedef首先是给顺序表重命名为SL。
  • 其次指针类型不一定只有整型的,所以重命名为SLDataType,这样写后续也方便修改补充。
  • 能用到的头文件,写在开头

3.2源文件中:

解释:

  • 首先源文件中要写引用的头文件。
  • 初始化,会对顺序表中内容有所变动,所以需要传址调用而非传值调用,因为传值调用只会对副本进行修改,对原对象(测试文件中的实参)不会有所影响。

3.3测试文件中:

解释:

  • 定义一个顺序表变量,将它的地址传址调用给源文件中的SLInit函数。
  • tip:你可以将这里的sl想象成一个用户,将该用户的地址传给源文件中的初始化函数,它可以通过这个用户地址,找到顺序表,就可以对顺序表中的成员进行初始化。

四.空间释放

4.1头文件中:

4.2源文件中

解释:

  • 依然是传址,原因同上。
  • 空间释放是因为向内存申请空间后,使用完毕需要释放归还。(不懂就去看我博客-C语言专栏-动态内存管理)

4.3测试文件中

  • 注意:测试文件中的主函数不变,依然是上图3.3,后续不再解释。上面的4.3这里只展示新增加的代码。

五.尾插

5.1头文件:

解释:

  • 参数部分分别是:指向顺序表结构体的指针,要插入顺序表尾部的元素

5.2源文件:

解释:

  • 尾插的原理分析图:

  • 首先无论是尾插还是头插,都得先assert断言,防止测试文件中传NULL。如果是NULL,则报错。
  • 其次无论是头插还是尾插,在插入之前得判断空间是否足够,不够了就得动态申请空间。
  • 使用realloc来动态申请空间,原因:在原有空间基础上进行增容。
  • 那么,要申请多大空间/一次增容多大?实际上数学推理出来,增容通常来说,一般是2到3倍。
  • 注意:不能频繁增容,否则程序运行效率会大大降低。但是!也不能一下增容特别大空间(比如4000),因为空间给小会不够用,空间给大会造成资源浪费,所以2倍2倍的给(4--8--16--32......)。
  • 217行动态申请空间,得首先考虑到空间capacity是否为0(用三目操作符判断),所以210行。
  • 当然,申请好空间后,还要判断是否申请成功了,如果失败,则返回的是NULL。所以219~223。如果判断好不是NULL,说明申请成功,则225。
  • 注意;213~214写法错误(注释部分),因为我们并不知道是否能成功申请空间,如果失败了,则arr之前的空间也一并不见了,所以realloc申请的空间不能返回给ps->arr,我们可以先返回给一个临时变量tmp。
  • 申请好空间之后再尾插。230行。

5.3测试文件:

六.头插

6.1头文件中:

解释:

  • 尾插就是插在下标为size的地方,头插就是插在下标为0的地方

6.2源文件中:

解释:

  • 头插原理分析图:

  • 首先无论头插还是尾插,都要assert断言和判断空间够不够。
  • 然后就是通过for循环,让顺序表中已有的数据整体往后挪动一位。
  • arr[0]空出来了,现在插入x就可以了。225行。

6.3测试文件:

七.打印

7.1头文件:

7.2源文件:

7.3测试文件:

假如用于尾差的打印测试:

八.尾删

8.1头文件:

解释:

  • 为什么没有像尾插/头插那样有第2个参数?因为这里是删除数据,不是插入数据。

8.2源文件:

解释:

  • 尾删原理分析图:

  • 首先得assert断言一下,其次203行的assert是为了判断顺序表是否为空,如果为空就不能进行删除操作。
  • 206这一行后来注释掉了,因为只要size被正确更新,从顺序表的角度看,就已经完成了尾删。206行就显的有点多余,直接有150行的--size就行了。后续多出来的项也会被新元素覆盖,不会有其他影响。
  • 最后记住size-1

8.3测试文件:

九.头删

9.1头文件

9.2源文件

解释:

  • 首先是assert断言和判断顺序表是否为空。
  • 然后for循环将每个元素往前移。
  • 最后记住:size会-1

9.3测试文件

http://www.dtcms.com/a/439218.html

相关文章:

  • 网站 备案 中国 名字微网站模板代码
  • ASP.NET Core Web API 中控制器操作的返回类型及Swagger
  • AI模型测评平台工程化实战十二讲(第六讲:大模型测评系统:智能模型管理模块的设计与实现)
  • 手写MyBatis第90弹:动态SQL测试策略与验证方法
  • 比较有名的公司网站网站建设犀牛云
  • 网站备案 企业备案响应式博客wordpress
  • AI 重塑实体经济:2025 传统产业转型的南通实践启示
  • 番禺建设网站平台网站建设所需要的内容
  • 网站每年续费费用南通制作网站
  • 特优项目网站建设方案辽宁建设工程信息网开评标系统
  • 哪个网站可以做验证码兼职强 的软件免费的软件下载
  • IPV4/Ipv6公网检测网站, DDNS配置
  • 贵州省城乡和住房建设厅网站线上app怎么做
  • 地方网站推广云主机费用
  • QT肝8天13--删除用户
  • 素材分享网站源码北龙中网 可信网站验证 费用
  • P7226 [COCI 2015/2016 #3] POT
  • 网店代运营网站建设银行信用卡积分兑换话费网站
  • 数字资产离婚分割案:巨额数字资产归谁所有?
  • 网站源码安装教程阳江房产网站
  • 2.VMware上的Kali Linux操作系统安装(2025年10月3日)
  • 全志T113-S3开发板遇到的问题
  • 神卓云监控 K900:异地监控技术落地与方案优化实践
  • 东莞企业网站排名wordpress重置后密码是多少
  • 设计网站建设网站美化教程下载
  • 队列算法精讲:从栈与队列互实现到循环队列(待补充)
  • 蝴蝶优化算法:原理、改进与应用
  • 你会怎么做外国的网站建一个购物网站多少钱
  • 数据驱动下的集成学习实战:从算法选型到业务落地的完整方法论
  • dw旅游网站模板下载物流网站如何设计