资源简介 (共29张PPT)2.2 链表课前学习任务结合数组的特性和基本操作,针对如下例子设计数组以组织和存储关键数据:① 处理全班同学的信息,时常需要进行信息访问;② 处理学校外来人员信息,进校时登记信息,出校时移除信息。链表基本概念链表是将需要处理的数据对象以节点的形式,通过指针串联在一起的一种数据结构。节点结构数据区域 指针区域保存数据元素保存相邻节点的存储地址某节点后继节点前驱节点链表基本概念根据节点中指针的数量可以分为:单向链表:双向链表:循环链表:data nextprev data nextdata nextdatan nextn···链表的特性① 链表占用的空间不固定;② 每个链表中一般要有一个头指针,以实现链表的引用和边界处理;③ 同一链表中每个节点的结构均相同。存储地址 数据区域 后继指针0 “黄刚” 11 “李丰” -12 “王林” 03 “吴坚” 2单链表存储结构head单链表示意图吴坚2第一个节点head王林0第二个节点黄刚1第三个节点李丰-1第四个节点(尾节点)请同学们暂停视频,尝试并完成“学习任务单”中的“学习任务一”。【学习任务一】认识链表为了满足链表能在两个方向都能进行遍历的需求,请在图1为每个节点补充正确的前驱指针。存储地址 数据区域 前驱指针 后继指针0 “黄刚” 11 “李丰” -12 “王林” 03 “吴坚” -1 2图1 双向链表存储结构图head单链表示意图吴坚2第一个节点地址3head王林0第二个节点地址2黄刚1第三个节点地址0李丰-1第四个节点地址1320【小要求】与数组的相关操作进行比较,各自的操作效率谁优谁劣?为什么?链表的基本操作链表创建节点访问节点插入节点删除链表的基本操作——链表创建数据区域 后继指针链表结构:“姓名+手机号”头指针head:指向第一个节点单向链表校外人员进出登记:信息插入和删除链表的基本操作——节点插入data1 next1data2 next2data3 next3修改新节点和前驱节点的指针data1 next1data3 next3data2 -1data3 next3head插入到第一个节点之前插入尾节点之后-1next2修改新节点指针和头指针修改新节点和前驱节点的指针插入到两个节点之间①“李彤”入校;存储地址 数据区域 后继指针0 “杜刚+1xx.” -11 “张强+1xx.” 0head2 “李彤+1xx.” -12张强0head杜刚-1李彤-1新节点2链表的基本操作——节点插入②“李丰”在“杜刚”之前入校;存储地址 数据区域 后继指针0 “杜刚+1xx.” 21 “张强+1xx.” 02 “李彤+1xx.” -1head3 “李丰+1xx.” 03张强0head杜刚2链表的基本操作——节点插入李彤-1李丰0新节点3data1 nextdata2 nextdata3 next删除中间节点修改前驱节点的后继指针,让待删节点的前驱和后继直接相连链表的基本操作——节点删除data2 nextdata3 nextdata1 nextdata2 next删除第一个节点head删除最后一个节点请同学们暂停视频,尝试并完成“学习任务单”上“【学习任务二】链表基本操作”。【学习任务二】链表基本操作存储地址 数据区域 后继指针0 “杜刚+1xx.” 21 “张强+1xx.” 32 “李彤+1xx.” -13 “李丰+1xx.” 0(1)“杜刚”出校,请在如下绘制节点链接关系,并在上述存储结构图中进行相应修改:head张强3head杜刚2李彤-1李丰022【学习任务二】链表基本操作存储地址 数据区域 后继指针1 “张强+1xx.” 32 “李彤+1xx.” -13 “李丰+1xx.” 2(2)“胡洁”在“张强”之前入校,请在如下修改节点链接关系,并在上述存储结构图中进行相应修改head张强3head李彤-1李丰24 “胡洁+1xx.” 1胡洁1head【学习任务二】链表基本操作(3)“李彤”出校,请在如下修改节点链接关系,并在上述存储结构图中进行相应修改:胡洁1head李丰2李彤-1张强3存储地址 数据区域 后继指针1 “张强+1xx.” 32 “李彤+1xx.” -13 “李丰+1xx.” 24 “胡洁+1xx.” 1head-1-1【学习任务二】链表基本操作(4)“胡洁”出校,请在如下修改节点链接关系,并在上述存储结构图中进行相应修改:胡洁1head李丰-1张强3存储地址 数据区域 后继指针1 “张强+1xx.” 33 “李丰+1xx.” -14 “胡洁+1xx.” 1headhead操作 数组 链表访问插入删除较高与数组的操作做比较,各自的操作效率(选填:较高/较低)较高较高较低较低较低【学习任务二】链表基本操作请同学们暂停视频,尝试并完成“学习任务单”上“【学习任务三】实践巩固——约瑟夫问题”。【学习任务三】实践巩固——约瑟夫问题n个人排成一圈,从某个人开始,按照顺时针方向从1开始依次编号。从编号为1的人开始顺时针“1,2,3,···,m,1,2,3,···,m”报数,报到m(m大于1)的人退出圈子。这样不断循环下去,圈子里的人数将不断减少。由于人数是有限的(n个),因此最终会只剩下一个人,试问最后剩下的人的初始编号是多少?分析上述问题,按照如下步骤进行实践:(1)抽象与建模 该问题中的关键数据是: 简述问题解决的计算模型:所有人员的初始编号① 形成1.2.3...n的循环序列② 从编号1开始计数,每过1个编号计数值加1,当计数到m时将该编号从循环序列中移除;并从该编号循环后一编号从1开始重新计数。重复这个过程,直到循环序列中只剩下一个编号,该编号即为最后剩下人员的初始编号。分析上述问题,按照如下步骤进行实践:(2)设计链表与算法链表设计:链表中节点的数据区域保存指针区域保存【学习任务三】实践巩固——约瑟夫问题初始编号后继节点地址单向循环链表尾节点指针区域指向第一个节点头指针指向编号1所在节点(2)设计链表与算法算法设计【学习任务三】实践巩固——约瑟夫问题①从第一个节点开始报数,每过1个节点报数值加1,将计到m的链表节点删除;继续从后继节点开始,重新从1报数。重复这个过程,直至链表中只剩下一个节点。②此时头指针所指节点中的数据区域即保存了最终留下的初始编号。存储地址 数据区域 后继指针0 11 22 33 44 512340head(3)模拟实现①共5个人围成圈,创建由5个节点组成的单循环链表,完善如下存储结构。【学习任务三】实践巩固——约瑟夫问题②从链表第一个节点依次报数,每报到3的节点从链接关系中删除。并在上述结构中及时修改相关节点的指针。最后留在圈子内的初始编号: 。存储地址 数据区域 后继指针0 1 11 2 22 3 33 4 44 5 0←报数值:1←报数值:2←报数值:33←报数值:1←报数值:2←报数值:31←报数值:1←报数值:2←报数值:31←报数值:1←报数值:2←报数值:33headhead【学习任务三】实践巩固——约瑟夫问题4head课堂小结链表概念特性基本操作应用链表解决实际问题的一般步骤第一节课后作业完成课后作业练习 展开更多...... 收起↑ 资源预览