c语言程序设计与项目实践第11章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 链表 本章的学习重点 ◆ 链表的定义 ◆ 结构体实现单链表 ◆ 结构体实现双向链表 ◆ 链表中插入结点 ◆ 链表中删除结点 11.1 什么是链表 链表是物理上的一个个不连续的内存块按照一定的逻辑顺序连接而成的数据结构。每个数据块构成一个结点。结点是链表的基本元素,因此,也可以说链表由结点组合而成。 1.链表的结点 在存储每个结点数据元素时,除了存储结点本身要承载的数据信息外,还要存储与它相邻的结点的地址信息,这两部分的组合称为结点(Node)。 数据域(Data Domain): 存储数据信息的内存区域 引用域(Reference Domain):存储与其相邻结点地址的内存区域,又称为指针域(Pointer Domain),如图所示为链表结点的逻辑结构示意图。 11.1 什么是链表 2.单链表的逻辑结构 将各个单链表结点按一定顺序连接起来,就构成了链表。 表头结点(header): 链表的开头,索引链表的起始位置,一般表头结点仅有引用域,而没有数据域, 表尾结点: 单链表中最后一个结点,通常表尾结点的引用域赋值为空,即为NULL。 如图所示为单链表的逻辑结构示意图。 11.1 什么是链表 3.双向链表的逻辑结构 双向链表也叫双链表,是链表的一种,它每个数据结点中都有两个引用域,一个用于指向下一个结点,称为直接后继或后继结点,另一个用于指向上一个结点,称为直接前驱 或前驱结点。如图所示为双向链表的逻辑结构示意图。 4.循环链表的逻辑结构 循环链表是将单链表或双向链表的表尾指向表头,从而使链表构成一个环形结构,因此称为循环链表。 11.2 结构体实现单链表 C语言中,可以使用结构体定义链表的结点。由于链表的结点需要包含引用域,用于指向下一个结点的位置,因此,结点中必须包含指针类型成员,用来存放下一个结点的地址。 11.2.1 单链表结点的结构体实现 1.普通结点的定义 使用结构体定义单链表结点的一般表达形式为: struct 结点名 { 数据域 引用域 }; 例如,要定义一个学生数学成绩的链表,可以使用下面的结点定义: 01 struct StuNode //定义结构体StuNode 02 { 03 char Name[32]; 04 float Score; 05 struct StuNode *next; //引用域,以结构体指针表示 06 }; 11.2.1 单链表结点的结构体实现 2.头结点的定义 单链表中,头结点仅含有引用域,通常使用header表示。因此,头结点可以使用一个结构体指针来表示。例如,可以使用下面的代码定义上述讨论的链表头结点: struct StuNode *header; 当链表没有普通结点是称为空结点,对于空结点的链表表头结点,应该赋值为空,可以使用如下语句实现: header = NULL; 11.2.2 单链表的结构体实现 1.结构体变量构成链表 将几个具有结点属性的结构体变量连接起来,也可以构成链表。例如,设计一个简单链表。首先定义几个StuNode类型的结构体变量,用于表示链表结点: struct StuNode Zhangsan, Lisi, Wangwu, Zhaoliu; struct StuNode *header = NULL; 01 header = Zhangsan; //表头结点指向结点Zhangsan 02 Zhangsan.next = Lisi; //Zhangsan的引用域指向结点Lisi 03 Lisi.next = Wangwu; //Lisi的引用域指向结点Wangwu 04 Wangwu.next = Zhaoliu; //Wangwu的引用域指向结点Zhaoliu 05 Zhaoliu.next = NULL; //Zhaoliu的引用域为NULL 如图所示为该链表的逻辑结构示意图。 11.2.2 单链表的结构体实现 2.结构体数组构成单链表 将结构体数组中各个元素设置为链表结点的结构,并且将各元素按一定规则连接起来也可以构成单链表。 范例11.1 ListAndStructArray.c 有一个含有5个元素的结构体数组,用于存放学生的数学成绩,每个元素中含有成员姓名、学号和成绩。设计一个链表,将学生成绩由高到低排列,并输出排序后的学生信息。 11.2.2 单链表的结构体实现 4.单向循环链表的结构与实现 单向循环链表与单向链表类似,差别在于表尾结点的引用域不是指向NULL,

文档评论(0)

0716 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档