【程序员必备小知识-基础6】浅谈链表

128 阅读2分钟

引言

前面聊了数组,知道数组对随机读写是非常快速的,但是数组显然是不能满足我们的要求的,不然也就不会有这篇文章了,那数组到底有什么缺点呢?如何解决呢?我们就来聊聊吧。

数组带来的问题

前面说的都是对数组元素的读写,我们生活中远不止读写,比如我们开了一个俱乐部,我们用数组进行会员的存储,那就需要对会员进行添加和删除,这两个操作对数组而言都是要改变数组长度的操作,数组是不允许自己的长度改变的,因为数组是顺序存储型的数据结构,那怎么办呢?只能创建新数组,把原数组要的元素挪过来,然后销毁原数组。

这一系列过程是很麻烦和耗资源的,尤其是数组长度越大越难玩,那我们就得提出一个新的数据结构-链表。

链表

数组是顺序存储的,我们能不能不让数组元素进行顺序存储,而是让它哪里有空位哪里就插在哪?但要知道每个元素的下个元素的位置在哪里,这样,我们就可以从第一个元素起始,找到下一个元素,进而找到我们想要的元素。

这有点像案件推理,你当前的线索无法断案,但是你知道当前线索的下一个线索在哪,直到找到你觉得那条最重要的线索就能断案了,这个像链式的存储结构,我们称之为链表。

元素存储

链表中的元素可以是连续的存储,也可以不连续,但是与顺序结构本质的不同在于:链表除了要存储数据data,还要存储下一个数据的地址next,我们把存储当前元素的信息区域叫做数据域,存储下一个数据地址信息区域的叫做指针域,指针域中存储的信息也叫指针。

单链表

n个节点构成链表,如果每个节点只有一个指针域那就是单链表,链表中第一个节点存储的指针是头指针,链表最后一个结点指针为Null。

元素查找和删除

由于链表是不连续的,所以不能进行随机高速读写,只能遍历整个链表,当然我们可以采用二分查找优化,但是增删很容易,只要查找要增加或删除元素的位置,修改指针就可以了。