写数据结构系列的文章原因:
正是因为我发现自己对于基本的东西都太不懂。大大小小的比赛也没少玩,代码也写了不少,但始终没有突破,到头却发现自己对于基本的知识都掌握的不扎实,真可悲!
数据结构系列文章的亮点:
通过图形化的学习,对每一种算法用图解的方式展开讲解,这样不仅可以剔除掉纯算法的枯燥乏味,而且还便于理解。本系列文章所有的代码本人都会验证通过,并且后期会在leetcode上选取合适的例题进行实际训练。
线性表是数据结构中的一种存储结构,通俗点来说,就是把所有数据串成一串,然后在存储到物理空间中。
例如,对于数据
1 , 2 , 3 , 4 , 5 1 ,2,3,4,5 1,2,3,4,5
要将其存储到一段空闲的物理空间中,通常有如下两种存法:
这种存放方式也是大家经常使用的一种存放方式,大多数人最容易想到。
数据分散存放这种存放方式在物理地址空间上看似乱序且不连续,但是当我们按照原先的线性顺序依次遍历时,数据的顺序并不会因物理地址空间的乱序和不连续而出现差错,这也正是线性表的独特之处——用一根线把它们按照顺序串起来 。
顺序存储结构上面我们介绍了两种存放方式,而第一种数据集中存放,即将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构(简称顺序表)。可见,顺序表和数据非常相似,我们可以将其与数据类比学习
顺序表的初始化首先,需要申请足够大小的物理空间,而且为了方便后期使用表中的数据,顺序表还需要实时记录顺序表申请的存储容量和顺序表的长度,也就是表中存储数据元素的个数。
首先,先定义一个顺序表
注意:这里的head是一个未初始化的动态数组,用来存储顺序表中的数据,前往不要只把它看做是普通的指针。
然后就是顺序表的初始化,分两步完成:
对上面提到的这两句代码,
t.length=0;//空表的长度初始化为0t.size=5;//空表的初始存储空间为5很多小伙伴可能不理解,长度初始化都为0了,存储空间却为5。其实这两者是互不相关的,初始空间为5,说明我向计算机预先申请了大小为5的存储空间,即t.size=5;,但在这个5存储空间里并没有存储任何数据,因此它的长度就为0,即t.length=0;。
这样我对顺表的初始化已经完成,通过改变size 的大小,我们可以改变预先申请的存储空间大小,接下来,我们就可以对顺序表进行操作了。在主函数添加代码,往顺序表中添加数据
1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5并打印
输出如下
几乎所有的数据结构都有插入操作,对于顺序表来说,可以根据插入的位置不同分为三种情况:
表头插入表尾插入在表中插入虽然数据元素插入顺序表中的位置有所不同,但我们都是使用的是同一种方式去解决,即:通过遍历,找到数据元素要插入的位置,然后做如下两步工作:
将要插入位置元素以及后续的元素整体向后移动一个位置。将要插入的元素放到腾出来的位置上。例如,我们要在顺序表 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5 中 3 3 3 的位置插入6,需要一下几个步骤
首先找到要插入的目标位置
然后将目标位置以后的元素(包括目标位置的元素)整体向后移一个单位
最后就是从此目标位置插入要插入的元素
这里具体的代码不在给出,小伙伴如果想学习的话文章末尾留言即可。 顺序表的删除
顺序表中删除元素,这个实现起来的确没什么水平,非常简单,只需找到目标元素,并将其后续所有元素整体前移 1 个位置即可。后续元素整体前移一个位置,会直接将目标元素删除,可间接实现删除元素的目的。
例如,我们要在顺序表 1 , 2 , 6 , 3 , 4 , 5 1,2,6,3,4,5 1,2,6,3,4,5 中 删除6
首先遍历找到6
后面的元素整体向前移一个单位
这样,我们的删除操作就完成了,是不是很简单呀。
顺序表更改元素
顺序表的更改元素也很简单,直接找到要更改的元素,直接修改就行。
例如,我们要在顺序表 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5 中将3修改为6
首先遍历找到3
然后就可以直接将其修改为6,无需其他操作
这是数据结构系列文章的第二篇,主要介绍了线性表中的顺序表的相关操作,下一篇将主要介绍链表的相关知识。关于关于顺序表的相关代码本人已全部在linux上验证通过,各位小伙伴如果想要参考请在文章末尾留言。
欢迎关注本人公众号
D e c o d e 技 术 站 Decode技术站 Decode技术站