链表—啥是链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表—啥是链表相关的知识,希望对你有一定的参考价值。

参考技术A 书本概念

链表是一种将数据存储到“结点”中的数据结构,需要存储多少个数据,就生成多少个“结点”,把这些“结点”用指针挂接起来。

为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),这两部分信息组成数据元素ai的存储映像,称为结点。

结点中包括两个域,其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。指针域中存储的信息称为指针。

慕课笔记

前面说过,对于链表数据是存储在结点中的。结点包括两部分,数据e和指针next,

说了这么多,举个例子吧。下图可以看做是一个链表,链表中共有三个结点,其中的1、2、3是数据e本身,而且箭头是next指针。链表不可能是无穷无尽的,对于最后一个结点,其next指针指向null,即指向了空结点。

可以看出,链表不像静态数组那样,一下子new出来一片空间,而是需要多少,就生成多少个空间(结点),只需要把他们挂接起来。也不需要考虑空间是否大了或者小了。

同时,这也是链表的缺点:失去了随机访问的能力。这是因为:

在底层机制上,数组开辟的空间在内存里是连续分布的,直接去找这个索引对应的偏移,直接计算出相应元素的内存地址,用O(1)的复杂度把这个元素取出;而链表是靠next一层一层连接的,在计算机的底层,每一个结点所在的内存位置是不同的(每new一个结点,计算机就会随机分配一个地址),只能靠next一点一点的去找到我们想要的元素

链表和数组对比:

数组最好用于索引有寓意的情况。例如,score[2],代表学号为2的,学生的成绩;数组支持快速查询。

链表不适合用于索引有语意的情况;链表是动态的。

何时使用二者,就要看我们的需求是适合动态的数据结构,还是适合静态的数据结构。

简单的编写下链表这个数据结构

以上是关于链表—啥是链表的主要内容,如果未能解决你的问题,请参考以下文章

c语言 初级链表

JavaScript单向链表的创建遍历插入删除操作

链表一

什么是链表?

一文讲透链表操作,看完你也能轻松写出正确的链表代码

一文讲透链表操作,看完你也能轻松写出正确的链表代码