数据结构课件代码第2章线性表2713章节幻灯片.ppt

数据结构课件代码第2章线性表2713章节幻灯片.ppt

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ai-1 删除 ai ai+1 q=p-next; p-next=q-next; p-next-prior=p; free(q); p ai-1 q 双向链表删除操作是否可不用工作指针q? q ai-1 删除 ai ai+1 p-next = p-next-next; free(p-next-prior); p-next-prior = p; p ai-1 空表 非空表 a1 a2 … ... an he he 双向循环链表 单链表和循环单链表均只有一个链指针next,指向后继结点,而双向链表有两个指针,即向前指针Lnext和向后指针Rnext。 单链表结构的查询只能从链表入口开始,按结点的链指针逐个查询,直至结束;循环单链表可以从任意一个结点入口,按结点的指针循环查遍全表;双向链表按其结构特征可以同时向前和向后进行查询而搜索全表。 从存储空间的占有量分析,单链表和循环单链表所需的存储空间是相同的,而双链表由于增加了一个向前指针Lnext,因此大约需要增加一倍的指针存储空间。 5 各种链式存储结构的比较 空间 存储空间静态分配,需事先确定 存储密度高(d=1) (不考虑空闲区) 时间 是随机存取结构,可以根据序号直接定位 插入/删除结点操作时数据元素要移动 空间 存储空间动态分配,可以按需要使用 每一结点附加指针域(d1) 时间 是非随机存取结构,定位需从头指针扫描 插入/删除结点操作时通常只要修改指针 6 顺序表与链表的比较 顺序表和链表的存储结构 (a) 顺序表;(b) 单链表 线性表的存储方式对比 小结 本章主要介绍了如下一些基本概念: 线性表:一个线性表是n≥0个数据元素a0,a1,a2,…,an-1的有限序列。 线性表的顺序存储结构:在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。 线性表的链式存储结构:线性表的链式存储结构就是用一组任意的存储单元——结点(可以是不连续的)存储线性表的数据元素。表中每一个数据元素,都由存放数据元素值的数据域和存放直接前驱或直接后继结点的地址(指针)的指针域组成。 循环链表:循环链表(Circular Linked List)是将单链表的表中最后一个结点指针指向链表的表头结点,整个链表形成一个环,从表中任一结点出发都可找到表中其他的结点。 双向链表:双向链表中,在每一个结点除了数据域外,还包含两个指针域,一个指针(next)指向该结点的后继结点,另一个指针(prior)指向它的前驱结点。 除上述基本概念以外,还应该了解:线性表的基本操作(初始化、插入、删除、存取、复制、合并)、顺序存储结构的表示、线性表的链式存储结构的表示,掌握顺序存储结构(初始化、插入操作、删除操作)、单链表(单链表的初始化、单链表的插入、单链表的删除)。 s=(Node*)malloc(sizeof(Node)); //申请新结点 s-data=e; //将e赋给s的数据域 s-next=pre-next; pre-next=s; //链接 } ai-1 e ai ai-1 pre s 如下图所示的是链表插入前、后的逻辑状态。从图中可以看出,要插入一个结点,首先要从空间表中取一个空结点k,使得q结点(前趋结点的地址)的指针指向k,k结点的指针指向p(存储ai值的结点地址),同时把数据x存入k,即 q-next=k; k-next=p; 链表插入逻辑示意图 (a) 插入前;(b) 插入后 在链表的插入操作中,结点插入的位置可能有四种情况,下面分别加以介绍。设Head是链表入口或表头,x是插入结点的存储地址。 (1) 原来链表为空表,即Head=NULL,则插入结点为表首结点,表示为 Head=x; x-next=NULL; (2) 插入位置在表中第一个结点Head之前,则插入结点为新的表头,表示为 x-next=Head; Head=x; (3) 插入位置在表的中间,为q结点之后,p结点之前,表示为 q-next=x; x-next=p; (4) 插入位置在链尾,即新结点x作为原表尾结点p之后的新表尾,表示为 x-next=p-next; p-next=x; 或 p-next=x; x-next=NULL; 单链表删除第i个结点 操作为:找到线性表中第i-1个结点*p,修改其指针域让它指向第i+1个结点。释放第i个结点的空间。 ai-1 ai ai+1 ai-1 r= p-next; p-next= r-

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档