静态链表

什么是静态链表?

当你学完线性表和数组,紧接着的静态链表,让你摸不着 ,什么是静态链表呢。简而言之就是链表和数组/顺序表的结合,我们知道数组有下标,但是每个数据域之间没有指针,因为他们顺序的占有一块连续的空间,链表的存在也是为了改善数组的连续存储带来的空间浪费。

但是我们知道没什么东西是尽善尽美的,即便是链表改善了现在的存储结构,但是同样的也增加了指针与指针的内存,结合社会发展,我们只能根据我们的情况进行合理的选择。

虽然我不知道静态链表存在的意义或者使用的方式适哪里,但是既然存在,我们就有可能会用得到。

静态链表的结构

想要理解静态链表的结构并不难,这里先放一张图:

https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=190996640,4075547196&fm=26&gp=0.jpg

其实,静态链表是用数组代替指针的方式来的,其实在整个链表中,没有像单链表中存在的指针,他是将数组的元素进行了分割。

分割成了两部,分,两个数据域,data和cur,data数据域是用来存放数据元素的,cur则是用来当做游标,就是类似于单链表中的next的指针,举个例子就是说比如1元素的下标是1,,但他的cur存的是下一个游标2。这也就是图中为什么需要一个空的头结点。

静态链表的各种操作

这个地方很抱歉我没有具体试验过的程序,我只能把我理解的讲给你听,比较简单,但主要是方便学习者的理解。

静态链表的插入操作

静态链表与数组最大的不同在于cur这个数据域,因为他相当于承担了单链表中指针的功能。所以再进行插入操作时,他的方式就有些变化!

现在假定有一个静态链表,你想把一个名为G的元素插在第三位B的后面。

首先把G元素添加到静态链表,因为静态链表本质上是数组,所以,G现在是最后一位,假定此时G在第7位上。

接下来,我们将第三位的B的cur修改,原先的cur应该指向的是第四位,(假定第四位的元素是C,第五位是元素D)我们将它改为第七位的G。

然后我们再把G的cur改为原本的第四位。

这样,当我们再次遍历这个数组的时候,顺序就是BGCD。

其实这与我们想象的插入不一样,仅仅是改变了指针,但是在我们使用的时候,效果是一样的。

静态链表的删除操作

有了刚刚静态链表的插入操作,剩下的你就好理解了。

当我们进行删除时,用到的是free()

当指定的某个位置的数据域空了,他的数据不存在,我们要做就是将剩下的数据完整的连在一起。

加入下标为32的元素被删除了,那么。下标为32的部分会被空出来,那么下标31和33就会断层,我们仅仅把31 的游标改为33就可以对这个静态链表继续使用。

静态链表的优缺点


优点:

在进行插入删除的操作时,仅仅改变游标就可以了,不用移动元素,改进了顺序存储结构

缺点:

1.没能解决连续存储本身的物理问题。

2.失去了顺序存储结构随机存取的特性。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。