版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12.3 线性表的链式存储结构及其运算线性表的链式存储结构及其运算一、单链表的存储结构一、单链表的存储结构二、二、 单单 链表的操作实现链表的操作实现三、链表的运算效率分析三、链表的运算效率分析22.3 线性表的链式表示和实现 线性表的顺序表示的特点是用物理位置上的邻接关系来表示结点间的逻辑关系,这一特点使我们可以随机存取表中的任一结点,但它也使得插入和删除操作会移动大量的结点.为避免大量结点的移动,我们介绍线性表的另一种存储方式, 链式存储结构,简称为链表(Linked List)。32.3.1 线性链表链表是指用一组任意的存储单元来依次存放线性表的结点,特点:这组存储单元即可以是连续的,也
2、可以是不连续的,甚至是零散分布在内存中的任意位置上的。链表中结点的逻辑次序和物理次序不一定相同。 为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息,这个信息称为指针(pointer)或链(link)。这两部分组成了链表中的结点结构:datalink4 其中:data域是数据域,用来存放结点的值。next是指针域(亦称链域),用来存放结点的直接后继的地址(或位置)。 链表正是通过每个结点的链域将线性表的n个结点按其逻辑次序链接在一起的。由于上述链表的每一个结只有一个链域,故将这种链表称为单链表(Single Linked)。 5、单链式及表示方
3、法、单链式及表示方法(1)单链表单链表:构成链表的结点只有一个指向直接后继结点构成链表的结点只有一个指向直接后继结点的指针。其结构特点:逻辑上相邻的数据元素在物理上的指针。其结构特点:逻辑上相邻的数据元素在物理上不一定相邻。不一定相邻。如何实现?通过来实现!让每个存储结点都包含两部分:数据域和指针域让每个存储结点都包含两部分:数据域和指针域指针域指针域next或或样式:样式:数据域:存储数据域:存储元素数值数据元素数值数据指针域:存储直接后继的指针域:存储直接后继的存储位置存储位置一、一、 单链表的存储结构单链表的存储结构6定义单链表结点的结构体如下定义单链表结点的结构体如下:typedef
4、struct Node DataType data; struct Node *next;SLNode; 其中其中, ,datadata域域用来存放数据元素用来存放数据元素, ,nextnext域域用来存放指向下用来存放指向下一个结点的指针。一个结点的指针。7例:请画出例:请画出2626个英文字母表的链式存储结构个英文字母表的链式存储结构。该字母表在内存中链式存放的样式举例如下:该字母表在内存中链式存放的样式举例如下: 解:解:该字母表的逻辑结构为:该字母表的逻辑结构为:( a, b, a, b, ,y, z ,y, z)链表存放示意图如下:链表存放示意图如下: a1heada2/an讨论讨论
5、1 :每个存储结点都包含两部分:数据域和:每个存储结点都包含两部分:数据域和 。讨论讨论2:在单链表中,除了首元结点外,任一结点的存储位置在单链表中,除了首元结点外,任一结点的存储位置 由由 指示。指示。 其直接前驱结点的链域的值其直接前驱结点的链域的值指针域指针域(链域链域)81)结点:)结点:数据元素的存储映像。由数据域和指针域两部分组成;数据元素的存储映像。由数据域和指针域两部分组成;2)链表:)链表: n n 个结点由指针链组成一个链表。它是线性表的链式个结点由指针链组成一个链表。它是线性表的链式存储映像存储映像,称为线性表的链式存储结构称为线性表的链式存储结构。3)单链表、双链表、多
6、链表、循环链表)单链表、双链表、多链表、循环链表: 结点只有一个指针域的链表,称为单链表或线性链表;结点只有一个指针域的链表,称为单链表或线性链表;有两个指针域的链表,称为双链表(但未必是双向链表);有两个指针域的链表,称为双链表(但未必是双向链表);有多个指针域的链表,称为多链表;有多个指针域的链表,称为多链表;首尾相接的链表称为循环链表。首尾相接的链表称为循环链表。a1heada2an循环链表示意图:循环链表示意图:(2) 与链式存储有关的术语:与链式存储有关的术语:94)头指针、头结点和首元结点的区别)头指针、头结点和首元结点的区别头指针头指针头结点头结点首元结点首元结点a1heada2
7、infoan头指针头指针是指向链表中第一个结点(或为头结点、或为首元是指向链表中第一个结点(或为头结点、或为首元结点)的指针;结点)的指针;头结点头结点是在链表的首元结点之前附设的一个结点;数据域是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息,它不计入表长度。内只放空表标志和表长等信息,它不计入表长度。首元结点首元结点是指链表中存储线性表第一个数据元素是指链表中存储线性表第一个数据元素a a的结点。的结点。 示意图如下:示意图如下:10答:答:讨论1. 在链表中设置头结点有什么好处?在链表中设置头结点有什么好处?讨论2. 如何表示空表?如何表示空表?头结点头结点即在链表
8、的首元结点之前附设的一个结点,该结即在链表的首元结点之前附设的一个结点,该结点的点的等附加信息,其作用是等附加信息,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理,编程更方便。元结点进行统一处理,编程更方便。答:答:无头结点时,当头指针的值为空时表示空表;无头结点时,当头指针的值为空时表示空表;头指针头指针无头结点无头结点头指针头指针头结点头结点有头结点有头结点有头结点时,当头结点的指针域为空时表示空表。有头结点时,当头结点的指针域为空时表示空表。11一个线性表的逻辑结构为:一个线性表的逻辑结构为:(ZHA
9、O,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANGZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG),其存储结构用),其存储结构用单链表表示如下,单链表表示如下,请问其头指针的值是多少?请问其头指针的值是多少?存储地址存储地址数据域数据域指针域指针域1LI437QIAN1313SUN119WANGNULL25WU3731ZHAO737ZHENG1943ZHOU25答:答:头指针是指向链头指针是指向链表中第一个结点的指表中第一个结点的指针,因此关键是要寻针,因此关键是要寻找第一个结点的地址。找第一个结点的地址。7ZHAOH31称:头指针称:头指针H的值是的值是
10、31、带头结点单链表和不带头结点单链表的比较、带头结点单链表和不带头结点单链表的比较例:例:12上例链表的逻辑结构示意图有以下上例链表的逻辑结构示意图有以下两种形式两种形式:ZHAOQIANLISUNZHOUWUZHENG/WANGHZHAOQIANLISUNZHOUWUZHENG/WANGH区别:区别: 无头结点无头结点 有头结点有头结点13对比带头结点的单链表的插入、删除过程和对比带头结点的单链表的插入、删除过程和不带带头结点的单链表的插入、删除过程,可以不带带头结点的单链表的插入、删除过程,可以得知:得知: 若设计的单链表带头结点,则无论是在第一若设计的单链表带头结点,则无论是在第一个数
11、据元素结点前插入还是在其他数据元素结点个数据元素结点前插入还是在其他数据元素结点前插入都不会改变头指针的数值。前插入都不会改变头指针的数值。 若设计的单链表不带头结点,则在第一个数若设计的单链表不带头结点,则在第一个数据元素结点前插入与在其他数据元素结点前插入据元素结点前插入与在其他数据元素结点前插入其算法的处理方法不同。在单链表中删除一个结其算法的处理方法不同。在单链表中删除一个结点时类似。因此,单链表一般构造成带头结点的点时类似。因此,单链表一般构造成带头结点的单链表。单链表。14讨论: 链表的数据元素有两个域,不再是简单数据链表的数据元素有两个域,不再是简单数据类型,编程时该如何表示?类
12、型,编程时该如何表示?因每个结点至少有两个分量,且数据类型通常不一致,所因每个结点至少有两个分量,且数据类型通常不一致,所以要采用以要采用数据类型。数据类型。答:答:以以2626个字母的链表为例,每个结点都有两个分量:个字母的链表为例,每个结点都有两个分量:字符型字符型指针型指针型设每个结点用变量设每个结点用变量表示,其指表示,其指针用针用 表示,两个分量分别用表示,两个分量分别用和和表示,这两个分量如何赋值?表示,这两个分量如何赋值?p方式方式1: 直接表示为直接表示为 node.data;node.next=方式方式2:p指向结点首地址,然后指向结点首地址,然后 p-data=; p-ne
13、xt= ; 方式方式3: p指向结点首地址,然后指向结点首地址,然后 (*p).data=; (*p).nextb15设设p p为指向链表的第为指向链表的第i i个元素的指针个元素的指针, ,则第则第i i个元素的个元素的数据域写为数据域写为 ,指针域写为,指针域写为 。练习:练习:p-dataai的值的值p-nextai+1的地址的地址附附1:介绍:介绍C的三个有用的库函数的三个有用的库函数/算符(都在算符(都在 中):中):sizeof(x)计算变量计算变量x x的长度(字节数);的长度(字节数);malloc(m) 开辟开辟m m字节长度的地址空间,并返回这段空间字节长度的地址空间,并返
14、回这段空间的首地址;的首地址;free(p) 释放指针释放指针p p所指变量的存储空间,即彻底删除所指变量的存储空间,即彻底删除一个变量。一个变量。16sizeof(x)计算计算x x的长度的长度malloc(m) 开开m m字节空间字节空间free(p) 删除一个变量删除一个变量问问1:自定义结构类型变量:自定义结构类型变量node的长度的长度m是多少?是多少?问问2:结构变量:结构变量node的首地址的首地址(指针指针p)是多少?)是多少?问问3:怎样删除结构变量怎样删除结构变量node?*nextdatanode,长度为长度为m字节字节pmsizeof(node) /单位是字节单位是字节
15、p(node*)malloc(m)free(p) /只能借助只能借助node的指针删除!的指针删除!P-data=a; p-P-data=a; p-next=qnext=q17 对于指向结构类型的指针变量,可说明为:对于指向结构类型的指针变量,可说明为: *p, *q; /或用或用 struct SLNode *p , *q; /注:上面已经定义了注:上面已经定义了SLNSLNode为用户自定义的为用户自定义的NodeNode类型。类型。 类型定义和变量说明可以合写为:类型定义和变量说明可以合写为: Node /Node/Node是自定义结构类型名称是自定义结构类型名称 DataType data; /定义数据域的变量名及其类型定义数据域的变量名及其类型 Node *next; /定义指针域的变量名及其类型定义指针域的变量名及其类型SLNode,*p; /SLNode/SLNode是是NodeNode结构类型的类型替代结构类型的类型替代,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年粤人版七年级物理上册月考试卷
- 2025年度住宅装修木工支模施工合同协议4篇
- 2025年浙教新版选择性必修3历史上册月考试卷
- 二零二五版门窗行业绿色供应链管理合同7篇
- 二零二五年度幕墙节能诊断与改进合同4篇
- 二零二五年度宁波广告传媒企业劳动合同与知识产权保护协议4篇
- 二零二五版定制门窗设计制作与售后服务合同3篇
- 公共管理理论专题知到智慧树章节测试课后答案2024年秋武汉科技大学
- 二零二五年度农药生产许可证延续及变更服务合同3篇
- 二零二五年度电子信息产业农民工劳动合同参考文本4篇
- 中级半导体分立器件和集成电路装调工技能鉴定考试题库(含答案)
- 2024年江西生物科技职业学院单招职业技能测试题库带解析答案
- 桥本甲状腺炎-90天治疗方案
- (2024年)安全注射培训课件
- 2024版《建设工程开工、停工、复工安全管理台账表格(流程图、申请表、报审表、考核表、通知单等)》模版
- 部编版《道德与法治》六年级下册教材分析万永霞
- 粘液腺肺癌病理报告
- 酒店人防管理制度
- 油田酸化工艺技术
- 上海高考英语词汇手册列表
- 移动商务内容运营(吴洪贵)任务五 其他内容类型的生产
评论
0/150
提交评论