您的位置:首页 > 文旅 > 美景 > seo百度网站排名研究中心关键词首页优化_网站代码用什么打开_如何推广自己的店铺_网站推广策划案

seo百度网站排名研究中心关键词首页优化_网站代码用什么打开_如何推广自己的店铺_网站推广策划案

2024/12/23 12:27:24 来源:https://blog.csdn.net/2401_87465145/article/details/144377798  浏览:    关键词:seo百度网站排名研究中心关键词首页优化_网站代码用什么打开_如何推广自己的店铺_网站推广策划案
seo百度网站排名研究中心关键词首页优化_网站代码用什么打开_如何推广自己的店铺_网站推广策划案

1. 线性表

含义

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构,也就是说是一条连续的直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
换种方式理解,也就是说逻辑结构只是我们头脑中设想的一种理想状态,但实际上数据是以物理结构存储的。

顺序表和链表都属于线性表

2. 顺序表

(1)概念与结构

概念:顺序表是用一段物理结构连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。

在这里插入图片描述

(2)顺序表和数组对比

在这里插入图片描述
也就是说顺序表的思想可以类比数组的思想,只是换了一种称谓。

(3)顺序表的分类

1. 静态顺序表
(1)定义及优劣

顾名思义,静态顺序表也就是大小长度确定的一个顺序表,是用定长数组来实现的,你需要多大的空间来存储就申请多大的空间,但这也就会导致有时候空间不够用,或者空间申请过大造成浪费,所以这个使用的场景不多

(2)代码实现

在实现顺序表时就用到了前面C语言中学到的结构体的知识,下面是代码实现:

在这里插入图片描述

2. 动态顺序表
(1)定义及优劣

动态顺序表相较于静态顺序表就多了一些灵活性,我们可以随时通过改变数组的大小来决定存储更多还是更少的数据,这一点是比静态顺序表要好的,这也就决定了动态顺序表的应用场景要比静态顺序表要广泛,但是即使可以动态的改变数组的大小,但是每次修改多大范围就太让人头疼,扩大的小了不够用,扩大了多的怕浪费,这也是它的一个小缺点。

(2)代码实现

在这里插入图片描述
解析:这里我们定义了一个capacity(容量)来代表这个顺序表的大小,通过改变capacity来实现动态申请,也许有些同学看到这里会有一些疑问,为什么这里要用typedef来重定义这个数组的类型,因为你在实现完这个顺序表之后,你并不确定用户会用这个来存储什么类型的数据,所以在这里重定义的话,在存储不同类型的数据时就可以进行一键替换。

3. 动态顺序表的完整功能实现

(1)动态顺序表的初始化

代码实现

在这里插入图片描述

运行结果

到这里我们可以通过调试来看一下有没有成功初始化:
在这里插入图片描述
可以看到我们成功的对顺序表进行了初始化

(2)增容实现

首先思考一个问题,在使用顺序表时我们是不是首先要知道这个顺序表有足够的空间来存储数据,所以在使用之前就需要判断这个顺序表有没有足够的空间,如果空间足够就使用,如果空间不够就先扩容再使用,而且一般情况下是每次扩容二倍,下面给出代码实现:
在这里插入图片描述

这里我们后面在实现尾插头插的时候都要先判断空间是否足够,为了方便所以我们这里封装了一个函数来实现这个效果。

(3)尾插

思路整理

在这里插入图片描述

代码实现
声明

在这里插入图片描述

逻辑实现:

在这里插入图片描述

调试:

在这里插入图片描述
也可以打印出来看一下:
在这里插入图片描述

(4)头插

思路整理

在这里插入图片描述

代码实现
声明:

在这里插入图片描述

逻辑实现:

在这里插入图片描述
这里需要注意的一个细节就是在接受这个指针的时候我们用assert断言来判断了一下这个指针是否为空,这样使得这个函数会更加严谨

运行结果;

在这里插入图片描述

可以看到我们确实是实现了头插的效果

(5)特定位置插入

思路整理

在这里插入图片描述

声明:

在这里插入图片描述

逻辑实现:

在这里插入图片描述

运行结果:

在这里插入图片描述

可以看到我们确实是实现了特定位置的插入

(6)尾删

思路整理:

在这里插入图片描述

声明:

在这里插入图片描述

逻辑实现:

在这里插入图片描述

调试结果:

在这里插入图片描述
通过调试可以看到每执行完一次尾删操作,有效数据就少1,达到了尾删的效果

(7)头删

思路整理:

在这里插入图片描述

代码实现:
声明:

在这里插入图片描述

逻辑实现:

在这里插入图片描述

运行结果:

在这里插入图片描述

通过代码的运行结果我们可以看到我们的头删确实实现了预期的效果

(8)特定位置删除

思路整理:

在这里插入图片描述

声明:

在这里插入图片描述

逻辑实现:

在这里插入图片描述

运行结果:

在这里插入图片描述
通过代码运行结果我们发现我们实现了特定位置删除数据的效果

(9)数据的查找

思路整理:

所谓的查找数据,其实也就是通过循环来遍历数组来看看要查找的数据是否存在如果能找到就返回这个数据所在位置的下标,如果找不到就返回一个负数

代码实现
声明:

在这里插入图片描述

逻辑实现:

在这里插入图片描述

运行结果:

在这里插入图片描述
在这里插入图片描述

(10)销毁

思路整理:

其实这里的销毁无非就是将申请的空间归还给操作系统,也就是释放空间,但是这里也分为两种情况,如果指向数组的指针不为空,我才需要将它free掉,否则就无需再次释放了,并且需要将size和capacity都置为零

代码实现
声明:

在这里插入图片描述

逻辑实现:

在这里插入图片描述

调试结果:

在这里插入图片描述
通过调试我们可以看到销毁完之后顺序表中的指向数组的指针置为了空,size和capacity都置为了零。

小结:

1. 每一次插入数据都要先检查顺序表的空间是否足够,不够的话先扩容再插入
2. 每一次删除数据都要先检查顺序表是否有足够的数据可以删除,否则会出错

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com