2017年计算机二级公共基础知识学习教程:线性链表

2020-12-14   来源:保证书


  (五)线性链表

  1.基本概念

  前面的线性表均是采用顺序存储结构及在顺序存储结构下的运算。

  1)顺序存储的优点:

  结构简单

  运算方便

  2)顺序存储结构的缺点:

  要在顺序存储的线性表中插入一个新元素或删除一个元素时,为了保证插入或删除后的线性表仍然为顺序存储。在插入或删除元素时,需要移动大量的数据元素,因此运算效率较低。

  如果一个线性表分配顺序存储空间后,如果出现线性表的存储空间已满,但还需要插入元素时,会发生“上溢”错误。

  在实际应用时,可能有多个线性表同时使用存储空间,这样给存储空间的分配带来问题,有可能使有的队列空间不够或过多造成浪费。

  基于上述情况,对于大的线性表或元素变动频繁的大线性表不宜采用顺序存储结构,而应采用链式存储结构。

  3)链式存储结构

  假设每一个数据结点对应一个存储单元,该存储单元称为存储结点,简称结点。

  在链式存储方式中,要求每一个结点由两部分组成:一部分用于存放数据元素,你为数据域;另一部分用于存放指针,称为指针域。该指针用于指向该结点的前一个或后一个结点。

  在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系不一致,而数据元素之间的逻辑关系是由指针域来确定的。

  链式存储结构既可以用于线性结构,也可用于非线性结构。

  4)线性链表

  线性表的链式存储结构称为线性链表。

  将存储空间划分成若干的小块,每块占用若干个字节,这些小块称为存储结点。

  将存储结点分为两个部分,一部分用于存储数据元素的值,称为数据域;另一部分用于存储元素之间的前后件关系,即存放下一个元素在存储序号(即存储地址),即指向后件结点,称为指针域。

  在线性链表中用一个专门的指针HEAD指向线性链表中第一个数据元素的结点(即存放第一个元素的地址)。线性表中最后一个元素没有后件,因此,线性链表中的最后一个结点的指针域为空(用Null或0表示),表示链终结。

  在线性链表中,各元素的存储序号是不连续的,元素间的前后件关系与位置关系也是不一致的。在线性链表中,前后件的关系依靠各结点的指针来指示,指向表的第一个元素的指针HEAD称为头指针,当HEAD=NULL时,表示该链表为空。

  对于线性链表,可以从头指针开始,沿着各结点的指针扫描到链表中的所有结点。

  这种线性链表称为线性单链表,即可以从表头开始向后扫描链表中的所有结点,而不能从中间或表尾结点向前扫描位于该结点之前的元素。

  这种链表结构的缺点是不能任意地对链表中的元素按下同的方向进行扫描。在某些应用时,如果对链表中的元素设置两个指针域,一个为指向前件的指针域,称为左指针(LLink),一个为指向后件的指针域,称为右指针(RLink)。则这种链表是双向链表。

  5)带链的栈

  带链的栈即是用来收集计算机存储空间中的所有空闲的存储结点,这种带链的栈称为可利用栈。

  当需要存储结点时,即从可利用的栈的顶部取出栈顶结点;当系统要释放一个存储结点时,将该结点空间放回到可利用栈的栈顶。

  即在计算机中所有空闲的空间,均可以以结点的方式链接到可利用栈中,随着其他线性链表中结点的插入与删除,可利用栈处于动态变化之中,即可利用栈经常要进行退栈和入栈操作。

  6)带链的队列

  队列也是线性表,也可利用链式存储结构来进行保存。

  2.线性链表的基本运算

  线性链表包括的基本运算:

  在链表中包含指定元素的结点之前插入一个新元素

  在链表中删除包含指定元素的结点

  将两个线性链表按要求合并成一个线性链表

  将一个线性链表按要求进行分解

  逆转线性链表

  复制线性链表

  线性链表的排序

  线性链表的查找

  1)线性链表中查找指定的元素

  在线性链表中查找元素X:从头指针指向的结点开始往后沿指针进行扫描,直到后面已没有结点或下一个结点的数据域为X为止。

  元素的查找,经常是为了进行插入或删除操作而进行的,因此,在查找时,往往是需要记录下该结点的前一个结点。

  2)线性链表的插入

  线性链表的插入即在链式存储结构的线性表中插入一个新元素。

  在线性链表中包含元素x的结点之前插入新元素b,插入过程:

  (1)从可利用栈中取得一个结点,设该结点号为p,即取得的结点的存储序号存放在变量p中。并置结点p的数据域为插入的元素值b。

  (2)在线性链表中寻找包含元素x的前一个结点,该结点的存储序号为q。

  (3)将结点p插入到结点q之后。具体的操作:首先,使结点p插入到结点q之后(即结点q的后件结点),然后,使结点q的指针域 内容改为指向结点p。

  线性链表的插入操作,新结点是为来自于可利用栈,因此不会造成线性表的溢出。同样,由于可利用栈可被多个线性表利用,因此,不会造成存储空间的浪费,大家动态地共同使用存储空间。

  3)线性链表的删除

  线性链表的删除,即是在链式存储结构下的线性表中删除指定元素的结点。

  操作方式:

  (1)在线性表中找到包含指定元素x的前一个结点p

  (2)将该结点p后的包含元素x的结点从线性链表中删除,然后将被删除结点的后一个结点q的地址提供给结点p的指针域,即将结点p指向结点q。

  (3)将删除的结点送回可利用栈。

  从以上的删除操作可见,删除一个指定的元素,不需要移动其他的元素即可实现,这是顺序存储的线性表所不能实现的。同时,此操作还可更有效地利用计算机的存储空间。

  3.循环链表及其基本操作

  在线性链表中,虽然对数据元素的插入和删除操作比较简单,但由于它对第一个结点和空表需要单独处理,使得空表与非空表的处理不一致。

  循环链表,即是采用另一种链接方式,它的特点如下:

  (1)在循环链表中增加一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。

  (2)循环链表中最后一个结点的指针域不是空的,而是指向表头结点。在循环链表中,所有结点的指针构成一个环状链。

  在循环链表中,只要指出表中任何一个结点的位置,均可以从它开始扫描到所有的结点,而线性链表做不到,线性链表是一种单向的链表,只能按照指针的方向进行扫描。

  循环链表中设置了一个表头结点,因此,在任何时候都至少有一个结点,因此空表与非空表的运算相统一。

2017年计算机二级公共基础知识学习教程:线性链表

http://m.cnzealou.com/ziliao/99529.html

展开更多 50 %)
分享

热门关注

遵章守纪廉洁自律保证书【汇编五篇】

保证书

早恋保证书写给班主任1000字(合集四篇)

保证书

学生检讨保证书(通用5篇)

保证书

早恋保证书写给班主任500字范文(通用3篇)

保证书

出轨写给老婆的保证书范文五篇

保证书

早恋保证书写给班主任500字【四篇】

保证书

谈恋爱被抓保证书300字(合集五篇)

保证书

保证书学生认错范文(精选四篇)

保证书

保证下次不犯错的保证书五篇

保证书

部队结婚保证书精选3篇

保证书