大家好!今天让小编来大家介绍下关于链表—什么是链表链表基础知识的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

文章目录列表:

链表—什么是链表?链表基础知识 第1张

不带头结点的单链表中的 头指针head 直接指向开始结点,只需要将单链表 最后一个 指针域( 空指针 )指向链表中的 第一个结点 即可,链表为空 带头结点 的循环双链表是没有空指针的,对于链表数据是存储在结点中的,双链表就是在单链表结点上增添了一个指针域,双链表 终端节点的next指针 指向链表中第一个结点,静态链表结点空间来自于一个 结构体数组 (一般链表结点空间来自整个内存),由一系列结点(链表中每一个元素称为结点)组成。

本文目录

链表—什么是链表

书本概念

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

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

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

慕课笔记

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

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

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

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

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

链表和数组对比:

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

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

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

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

链表基础知识

超级幼稚的课本基础知识“摘抄”。
先建立一个结构体:

1.建立链表
基本思想就是先建立一个头节点,让头指针head和尾指针tail指向该节点,设置指针域为null(链表结尾的标志)然后创建一个新的节点,将pnew指向它,将实际数据放在其数据域中,指针域为Null。将其插入到tail的后边再将tail指向pnew所指的节点。

2.链表的插入操作
在第i个后插入新的节点,基本思想为:先建立一个新的指针指向 head所指的节点,然后循环寻找第i个节点,将新节点的指针域指向第i 个节点的后继节点,再将第i 个节点的指针域指向新节点。

3.链表的删除操作
基本思想为:首先判断删除的是那个节点,因为头节点不可删除。在新定义p,q指针,循环寻找第i个节点,q指向p的后继节点即要删除的节点,再将p的指针域指向q的后继节点,最后不要忘记释放被删除的节点q。

4.节点的输出操作
基本思想:新定义的P 指针,从头指针开始循环输出,直到其指针域为null。

5.链表的销毁操作
基本思想:新定义p,q指针,p从头节点开始,q指向p的后继指针,然后将p的指针域指向q的后继指针,这样q节点被删除了,然后释放q节点的内存。最后适当头节点的内存。

链表的定义

定义 链表 是一种物理存储单元上 非连续、非顺序 的存储结构,由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。

在链表的储存上,每个结点不仅包含所存的元素信息,还包含元素间的 逻辑信息

在每个结点除了包含的数据域外,还包含一个 指针域 ,用以指向其后继结点。

带头结点的单链表中, 头指针head 指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始储存信息。头指针head 始终 不等于NULL head-》next 等于NULL的时候,链表为空。

不带头结点的单链表中的 头指针head 直接指向开始结点,当head等于NULL时,链表为空。

双链表就是在单链表结点上增添了一个指针域,指向当前节点的 前驱

相比于单链表,双链表能够从 终端结点 反向走到 开始结点

只需要将单链表 最后一个 指针域( 空指针 )指向链表中的 第一个结点 即可。(如果循环单链表带头结点,则指向头结点;不带头结点,则指向开始结点)。

循环单链表可以实现从 任何一个结点 出发,访问链表中任何结点。(注意:此处应该区分与顺序表随机访问的特点。循环单链表指的是从一个结点出发,而不是知道一个结点从而迅速找到任何一个结点,因此循环单链表 不具有 随机访问特性。)

带头结点 的循环单链表,当 head 等于 head-》next 时,链表为空; 不带头结点 的循环单链表,当 head 等于 NULL 时,链表为空。

双链表 终端节点的next指针 指向链表中第一个结点,将链表中的第一个结点的 prior指针 指向终端结点。

不带头结点 的循环双链表, head 等于 NULL ,链表为空

带头结点 的循环双链表是没有空指针的,其为空状态下, head-》next head-》prior 必然都等于 head ,故一下四种语句都可判断为空

静态链表借助 一维数组 表示。

静态链表结点空间来自于一个 结构体数组 (一般链表结点空间来自整个内存),数组中每个结点含两个分量:

注意:静态链表的指针不是通常所说储存内存地址的指针型变量,而是储存数组下标的整型变量,其功能类似于指针,故在此称为指针

顺序表储存空间时一次性分配的,链表的是多次分配的

(注: 存储密度 = 结点值域所占存储量/结点结构所占存储总量

顺序表存储密度 = 1

链表存储密度 《 1

顺序表可以 随机存取 ,也可以 顺序存取

链表只能 顺序存取

顺序表平均需要移动一半元素

链表不需要移动元素,仅需 修改指针

以上就是小编对于链表—什么是链表?链表基础知识问题和相关问题的解答了,链表—什么是链表?链表基础知识的问题希望对你有用!

收藏(0)