[2018年最新整理]yss-线性链表.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[2018年最新整理]yss-线性链表

第三章 链 表 3.1 线性链表 3.2 循环链表 3.3 双向链表 3.1 线性链表 一、 链表的定义 链表和数组是程序语言中使用内存常用的方法,两者都为“线性表”,就像火车一般,一个车箱接着一个车箱有顺序的连在一起。但有不同: 数组结构——必须在程序编译前就定好数组元素的大小(静态内存分配),因此常需事先预估数据量的多少;数据元素在内存中连续存放,所以在删除或增加元素之后,其后的元素都必须跟着移动,降低了执行效率。 链表结构——在程序执行阶段才向任务系统要求分配所需的内存空间(动态内存分配);数据元素在内存中位置不一定相邻,所以每一项数据都有一个链接字段,可以存放下一个数据的地址,如此便可形成表结构。 二、链表的特点 链表中结点的逻辑次序和物理次序不一定相同。即:逻辑上相邻未必在物理上相邻。(注意与顺序表区别) 结点之间的相对位置由链表中的指针域指示,而结点在存储器中的存储位置是随意的。 三、结点的组成 数据域——表示数据元素自身值。 指针域(链域)——表示与其它结点关系。通过链域, 可将n个结点按其逻辑顺序链接在一起(不论其物理次 序如何)。 四、单链表 ----每个结点只包含一个指向后继结点的链域。 表头结点——(无前趋)用头指针指向之。虽然头指针只指 向表头结点,但从表头指针出发,沿着结点的 链(即指针域的值)可以访问到每个结点,故 常以表头指针来命名一个链表。 表尾结点——指针为空(无后继),用^或null表示。 中间结点——由其前趋的指针域指向之。 五、单链表的建立 1. 单链表内节点的定义 typedef int datatype; typedef struct node /*结点类型定义*/ { datatype data; /*数据域*/ struct node *next; }JD; /*next为指针域,指向该结点的后继*/ typedef JD *Link; Link head, p; /*指针类型说明*/ 2. 具有节点数据结构的p的含义 指针p与指向的结点关系示意图: p 结点 (*p) 说明: P——指向链表中某一结点的指针。 *p——表示 由指针p所指向的结点。 (*p).data或p-data——表示由p所指向结点的数据域。 (*p).next或p-next——表示由p所指向结点的指针域。 3. 配置内存空间 节点定义后,程序并不会马上配置我们所需的内存空间,而 是需利用 malloc( ) 向系统要求配置内存空间,如: p=(Link)malloc(sizeof(JD)) 对指针p赋值使其指向某一结点(按需生成一个JD结点类型的新结点)。 其中: (Link)——进行类型转换。 Sizeof(JD)——求结点需要占用的字节数。 Malloc(size)——在内存中分配size个连续可用字节的空间。 当内存配置成功时,p所返回的将是一个指针,当内存配置 失败时,p所返回的则是NULL指针。 注意:(使用malloc( )时,必须在程序开头: #includestdlib.h) 六、 单链表的基本运算

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档