顺序表的创建

本期我们主要讨论动态顺序表

这个内容可以分为三个部分

1.创建头文件进行函数声明

2.创建源文件进行函数定义

3.创建主文件进行测试

我们先来看看头文件里的函数声明:


函数声明:

头文件中包括<stdlib.h>库函数用于进行动态内存管理,assert用于警告退出。

SLDataType为顺序表中存储的元素类型,typedef int,即将int类型取个名字叫做SLDataType。与宏相反,例如define int SLDataType为将int转为SLDataType,而typedef是将SLDataType转为int。

SeqList为我们创建的顺序表,三个参数分别为

1.存储的元素指针类型(即首地址),相当于创建这种元素类型的数组,后面我们可以通过动态内存为这个地址开始分配空间。

2.现在在数组中存放的元素个数。

3.数组的空间容量,即可以存储多少个这种类型的元素。

接下来几个函数用途分别为初始化,销毁,输出,扩容,尾插,尾删除,头插,头删除操作。

函数定义:

函数定义的源文件中我们要包含声明的头文件,之后在开始对函数进行定义。

初始化函数:

传入顺序表的地址。

#注意:必须传入地址,传入的如果是顺序表本身的话只是对原顺序表的一份拷贝,无法队员顺序表进行修改。

将顺序表的数组地址设置为空。

将顺序表的元素个数设置为0。

将顺序表的空间大小设置为0.

销毁函数:

因为是动态顺序表,使用的空间是向操作系统借的,所以用完之后需要释放。

如果数组首地址不为空,则释放数组。

之后:

将顺序表的数组地址设置为空。

将顺序表的元素个数设置为0。

将顺序表的空间大小设置为0.

这一步其实可以直接用初始化函数完成。

输出函数:

按照正常的方式输出数组即可。

空间分配函数(重点):

如果已存放的元素个数等于数组可存放元素个数,则需要再分配空间。

此时有两种可能:

1.如果数组本身没有空间,则需要给他一个空间。

2.如果数组本身有空间,只需要将数组空间翻倍即可。

我们使用newcapacity来记录新空间的大小,并创建一个指针来记录开辟空间的首地址。

如果成功开辟空间,则将新空间传给顺序表,顺序表的数组地址改为新空间的地址,可存放元素个数改为newcapacity。

如果没有成功开辟,则产生警告,退出程序。

尾插函数:

先使用空间分配函数确保顺序表具有充足的空间,然后将顺序表数组的最后一位改为插入的值,粗放的元素个数size++。

头插函数:

第一步还是要检查数组空间是否足够。

找到顺序表数组最后一个位置

从size位置开始(数组元素最后一位为size-1,在头部插入新的值也就是所有元素后移一位)。

每一位都修改为前一位直到i=0时退出,i此时为第一位,即:将第一位修改为新插入的数x,然后将

存放的元素个数+1即可。

尾删函数:

将最后一位的值修改为-1然后存放的元素个数-1即可。

头删函数:

元素个数减去一,从第一位开始每一位都修改为后一位即可。

插入函数:

这个函数比头插尾插更高级,找到固定位置插入一个数即可。

我这里是pos为第几位,在那一位放上插入数。

查找函数:

用途为找到某个固定的数第一次出现的下标,没出现则返回-1.

汇总:

在我们创建的源文件中包含上我们刚刚定义函数的文件,然后进行运行,设计的符合预想,结束。

#看在博主这么辛苦写文章写代码的份上留个免费的赞吧,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/587115.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《QT实用小工具·八》数据库通用翻页类

1、概述 源码放在文章末尾 该项目实现数据库通用翻页类&#xff0c;主要包含如下功能&#xff1a; 1:自动按照设定的每页多少行数据分页 2:只需要传入表名/字段集合/每页行数/翻页指示按钮/文字指示标签 3:提供公共静态方法绑定字段数据到下拉框 4:建议条件字段用数字类型的主…

Micron FY24 Q2业绩强劲,凭内存实现翻盘

根据TechInsights数据显示&#xff0c;美光科技24财年第二季度业绩强劲&#xff0c;公司通过技术创新和产能优化&#xff0c;成功抓住了AI服务器和其他高性能应用带来的市场需求增长机遇。尽管短期内面临供应紧张的问题&#xff0c;但美光通过加大研发投入和产能转换力度&#…

Java8 Stream API全面解析——高效流式编程的秘诀

文章目录 什么是 Stream Api?快速入门流的操作创建流中间操作filter 过滤map 数据转换flatMap 合并流distinct 去重sorted 排序limit 限流skip 跳过peek 操作 终结操作forEach 遍历forEachOrdered 有序遍历count 统计数量min 最小值max 最大值reduce 聚合collect 收集anyMatch…

NumPy创建ndarray数组大揭秘

1.使用 np.array() 创建 使用 np.array() 由 python list 创建 n np.array(list) 注意 numpy 默认 ndarray 的所有元素的类型是相同的 如果传进来的列表中包含不同的类型&#xff0c;则统一为同一类型&#xff0c;优先级&#xff1a;str > float > int ndarray 的常…

阿赵UE学习笔记——24、动画播放控制

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。关于UE的动画系统&#xff0c;之前学习了很多&#xff0c;包括动画合成或者动画蒙太奇等&#xff0c;实际上最后得到的都是一个动画片段。那么这些动画片段&#xff0c;是需要怎样播放控制呢…

某东手势验证

地球上最强版&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 成功率99 基本不失败&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 识别速…

vmware让其他pc访问vmware中服务器的ip

端口转发 虚拟网络编辑器 nat设置 添加nat设置

图的应用试题

01&#xff0e;任何一个无向连通图的最小生成树( )。 A.有一棵或多棵 B.只有一棵 C.一定有多棵 D.可能不存在 02.用Prim算法和Kruskal算法构造图的最小生成树&#xff0c;…

vue-ueditor-wrap上传图片报错:后端配置项没有正常加载,上传插件不能正常使用

如图所示,今天接收一个项目其中富文本编辑器报错 此项目为vue2项目,富文本编辑器为直接下载好的资源存放在public目录下的 经过排查发现报错的函数在ueditor.all.min.js文件内,但是ueditor.all.min.js文件夹是经过压缩的 所以直接,将index.html中的引用路径修改为ueditor…

6.8物联网RK3399项目开发实录-驱动开发之RTC实时时钟的使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接&#xff1a;https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f RTC 使用 简介 AIO-3399J 开发板上有 一个集成于 RK808 上的RTC(Real Time Clock)&#xff0c;主要功能有时钟&#xff0c…

图片标注编辑平台搭建系列教程(6)——fabric渲染原理

原理 fabric的渲染步骤大致如下&#xff1a; 渲染前都设置背景图然后调用ctx.save()&#xff0c;存储画布的绘制状态参数然后调用每个object自身的渲染方法最后调用ctx.restore()&#xff0c;恢复画布的保存状态后处理&#xff0c;例如控制框的渲染等 值得注意的是&#xff0…

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…