顺序表的基本建立,以及增删改查的相关操作(c语言描述之顺序表)
c语言描述之顺序表
一: 顺序表是什么
在c语言描述的数据结构里,顺序表是一种线性存储结构。线性存取结构又是什么?
我们可以这样理解,线性存取就是将一串具有相同特征的数据用一根线串接起来,然后再放到我们的存储之中。当然,数据结构都是抽象出来的概念,但是这种抽象的理解方式也就掩盖了底层的复杂,也就方便我们去操作内存。
二:顺序表与链表的区别
顺序表是将元素放到一块连续的内存存取空间的。在存取元素数据之前,需要申请一块足够大的内存空间,数据之间是一个挨一个,所以我们说是顺序表,就是按照顺序依次存放。
链表在存放数据之时,什么时候存储数据,什么时候才申请存储空间,数据之间并不是顺序相连,而是链式相连,这条链,我们可以认为是每个元素所包含的指针。每个节点含有一个数据域和指针域,指针域存放了下一个元素的存储位置信息,构成了链。
链式存储是很容易产生碎片化信息的,因为元素前后并不是顺序相连,中间可能会含有部分未使用的空间,所以比较浪费空间,但是顺序表没有这种缺点,含有在空间占用上,肯定是链式存取更加占用空间,除了碎片化的一些东西,还有携带的指针域也会占用一部分的空间,所以内存的空间占用率比较大。
我们考虑具体的操作,我们在查找元素的时候还是顺序存储结构比较方便啦!因为我们直接可以从数组下标访问,很明显,这种查找方式的时间复杂度为o(1),相比之下,链式存储结构的查找方式就是从开始进行遍历,所以时间复杂度是o(n)。
但是呢,链式存储结构总不是一无是处的吧!不然我们还要它干嘛?我们考虑除去查找方式的其它操作,还有插入,删除操作这些,比如我们进行插入操作的时候,在顺序表中进行插入操作的时候,我们在表中插入一个元素,那么后面的元素就都得往后面移动,需要移动大量的元素,但是链表呢,我们通过链式存储结构,就不需要进行大量的移动。
想要了解链表请参考下面这篇博文。具体静态动态,这里都以代码实现了。
三: 顺序表的代码实现操作
现在我们考虑如何实现简简单单的顺序表
偷个懒,我们完全可以写一个数组,说它是顺序表。但是我们为了s更加深刻的理解,我们就还是采用结构体的这种方式。
理一下思路的话,数据储存的话,我们就用数组啦!因为是顺序存储嘛。
我们先看部分的关键代码,我们先看下面这一部分。这里主要显示的是顺序表的结构体存储方式。
我们稍微对比一下链表的结构体
我们可以对比到,我们先都把两者的 int 类型的数据age来看,一个是直接先申请了空间的,一个是没有先申请空间。当然,顺序表后面也可以申请空间的,我们这边先不做赘述。还有就是一个没有指针域,一个有指针域。可以说,这些就是两者比较在代码实现上最根本的区别。当然顺序表的组成结构体中我们还可以定义其它的有意义的数据,这个就看这人构造啦!比如用来记录顺序表的元素的计数器,这些都决定不了它是顺序表的本质。所以说,编程不是照搬照做!
甚至我我们在给顺序表空间的时候,我们也可以进行申请函数进行空间申请。我们这边就以数组定长来进行举例,因为比较反应本质,简单易懂。
来了哦!
下面我嗯实现顺序表的各种操作,包括增删改查!
1:我们先创建一个顺序表需要的结构体
2:下面我们初始化表,我们初始化表长为0
释疑
当L是指针类型的时候我们用L->data这样的格式引用数据,不是指针类型而是结构体对象类型的时候我们用L.data。我们这样简单的去理解,但是指针结构体这些内部还是有许多学问的。
解释部分内容
你可能会疑惑为什么L前面会加一个*号,有的时候会加,有的时候不加。我要对表进行操作,改变表的时候就会进行再主函数中传入表地址。如果我不对表进行改变的化,我就直接传入变量l,按照结构体的方式进行操作。
3:下面我们创建表(给表添加一些基本的元素)
释疑
我们用到的不过是随机生成函数,rand()这边,以及srand()函数,用来生成种子。想要了解,可以去问度娘。
4:下面我们进行输出表的部分元素
5:插入操作的函数
6:删除操作函数
7:进行查询函数
来看完整的源代码
功能函数都已经写出来了,我们要是想要更加灵活的对标进行操作,可以进行进一步的封装。所用代码编辑器vscode,轻量级,非常好用。
个人验证可以实现基本的操作,代码如果有任何纰漏错误,还望各位猿友指导谢谢。共同学习进步。
声明:未经同意,禁止转载!相关请遵守csdn博客协议。
-------jgdabc
__EOF__

本文链接:https://www.cnblogs.com/jgdabc/p/15803094.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具