线性表的链式表示和实现.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 静态单链表的类型定义如下: #define MAXSIZE 1000 //预分配链表的最大长度 typedef struct { ElemType data ; //数据域 int cur ; //指示域 }component ,SLinkList[MAXSIZE]; //这是一维结构型数组 前例1:一线性表 S = ( ZHAO, QIAN, SUN, LI, ZHOU, WU ),用静态链表如何表示? 说明1:假设S为SLinkList型变量,则S[MAXSIZE] 为一个静态链表; S[0].cur则表示第1个结点在数组中的位置。 * 说明2:如果数组的第i个分量表示链表的第k个结点, 则:S[i].data表示第k个结点的数据; S[i].cur 表示第k+1个结点(即k的直接后继)的位置。 data 1 ZHAO 3 LI 5 QIAN 6 WU 0 ZHOU 4 SUN 2 …… …… 0 1 2 3 4 5 6 … 1000 cur i 头结点 说明3:静态链表的插入与删除操作与普通链表一样,不需要移动元素,只需修改指示器就可以了。 例如:在线性表 S = ( ZHAO, QIAN, SUN, LI, ZHOU, WU )的QIAN, SUN之间插入新元素LIU,可以这样实现: * Step1:将QIAN的指示器原内容备份到临时变量temp: temp = S[3].cur; Step2:将QIAN的指示器换为新元素LIU的位置: S[3].cur = 7; Step3:将LIU的指示器变为后继SUN的位置: S[7].cur = temp ; data … … 2 SUN 4 ZHOU 0 WU 6 QIAN 5 LI 3 ZHAO 1 0 1 2 3 4 5 6 1000 cur i 头结点 LIU 6 7 7 * 本节小结 线性结构(包括表、栈、队、数组)的定义和特点: 仅一个首、尾结点,其余元素仅一个直接前驱和一个 直接后继。 2. 线性表 逻辑结构:“一对一” 存储结构:顺序、链式 运 算:修改、插入、删除 3.顺序存储 特征:逻辑上相邻,物理上也相邻; 优点:随机查找修改快 O(1) 缺点:插入、删除慢 O(n) 改进方案:链表存储结构 * 循环链表的特点:从任一结点出发均可找到表中其他结点 双向链表的特点:可方便找到任一结点的前驱 静态链表的特点:不用指针也能实现链式存储和运算 4.链式存储 特征:逻辑上相邻,物理上未必相邻; 优点:插入、删除快 O(1) 缺点:随机查找修改慢 O(n) 5.几种特殊链表的特点: * 讨论: 顺序存储和链式存储的区别和优缺点? 顺序存储时,逻辑上相邻的数据元素,其物理存放地址也相邻。顺序存储的优点是存储密度大,存储空间利用率高且能随机存取;缺点是插入或删除元素时不方便。 链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。链式存储的优点是插入或删除元素时很方便,使用灵活。缺点是存储密度小,存储空间利用率低,且只能顺序存取。 顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。 * 第2章 线性表 2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 一元多项式的表示和相加 * 2.3 线性表的链式表示和实现 2.3.1 链表的表示 2.3.2 链表的实现 2.3.3 一个带头结点的单链表类型 2.3.4 其它形式的链表 * 链式存储结构特点: 其结点在存储器中的位置是随意的,即逻辑上相邻的数据元素在物理上不一定相邻。 如何实现? 通过指针来实现! 让每个存储结点都包含两部分:数据域和指针域 指针 数据 指针 数据 指针 或 样式: 数据域:存储元素数值数据 指针域:存储直接后继或者直接前驱的存储位置 设计思想:牺牲空间效率换取时间效率 2.3.1 链表的表示 * 链表存放示意图如下: a1 head a2 /\ an …… 讨论1:每个存储结点都包含两部分:数据域和 讨论2:在单链表中,除了首元结点外,任一结点的 存储位置由 指示。 其直接前驱结点的链域的值 (2) 与链式存储有关的术语: 1)结点:数据元素的存储映像。由数据域

文档评论(0)

linyin1994 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档