资源简介 (共24张PPT)与组数链2.2 链表表录目链表的概念与特性01链表的基本操作02链表应用解决实际问题03问题提出问题:想用python制作一个班级学生的抽奖程序——输入中奖人数,点抽奖显示中奖人姓名。用数组保存中奖人姓名和暂时未中奖人姓名有什么弊端么?一、链表的概念链表指将需要处理的数据对象以节点的形式,通过指针串联在一起的一种数据结构。数据区域指针区域实际需要处理的数据元素相邻结点的存储地址一、链表的概念data3nulldata1nextnewnextdata2nexthead前驱节点后继节点一、链表的概念单向链表中各节点在内存中可以非顺序存储每个节点使用指针指向其后继节点的存储地址通过head进入链表,其他节点则需经过所有在它之前的节点才能访问尾节点的指针指向null,表示指向为空一、链表的概念问题与讨论:描述双向链表和循环链表的节点结构及其指针指向二、链表的特性同一链表中每个节点的结构均相同每个链表必定有一个头指针,以实现对链表的引用和边界处理链表占用的空间不固定三、链表的基本操作链表的创建——通过列表模拟实现链表实际应用可以不带头节点,本章用列表索引来代替地址指针,规定列表索引均为正索引Head值为-1,表示头指针指向为空,该链表为空链表三、链表的基本操作链表节点的访问data3nulldata1nextnewnextdata2next三、链表的基本操作链表节点的插入新数据插入位置data3nulldata1nextnewnextdata2next指针指向的修改是否必须有先后?三、链表的基本操作链表节点的插入的列表实现data16data8-1newnextdata37data65data53data70data21data4201234567head列表索引数据区域指针区域在第3个节点,即data3节点后插入新节点next三、链表的基本操作data16data8-1newdata37data65data53data70data21data4201234567878在第3个节点,即data3节点后插入新节点三、链表的基本操作在第3个节点,即data3节点后插入新节点问题与讨论:尾节点之后插入新节点,节点指针该如何修改?描述在有8个节点的单向链表中删除第一个节点、中间节点及尾节点的过程。三、链表的基本操作链表的插入应用例1 基于链表实现数据合并功能与数组合并功能类似,将两个有序链表的数据合并到其中一个链表中。三、链表的基本操作链表的插入应用三、链表的基本操作链表的插入应用三、链表的基本操作链表的访问与遍历例2 约瑟夫问题n个人排成一圈,从某个人开始,按顺时针方向从1开始依次编号。从编号为1的人开始顺时针“1,2,3,……,m,1,2,3,……”报数,报到m(m>1)的人退出圈子。这样不断循环下去,圈子里的人数将不断减少。由于人数是有限的(n个),因此最终会只剩下一个人。试问最后剩下的人的初始编号是多少?三、链表的基本操作链表的访问与遍历抽象建模:★ n个参与人员的初始编号,1至n的序列。★ 从编号1开始计数,每过一个编号加1,当计数到m时将该编号从数据序列中移除,并从该编号的后一编号从1开始重新计数。★ 计数到序列中最后一个编号,又从序列的开始编号继续计数,从而将计数序列构成一个环。三、链表的基本操作链表的访问与遍历设计数据结构与算法:★ 数据规模初始时可以确定(最大为n)。★ 数据处理过程中需要按照规则不断地移除数据,直至只剩一个为止。★ 数据规模逐渐变小,具有不稳定特性,符合链表应用。★ 最大编号报数后会从最小编号继续报数,所以可采用单向循环链表来组织数据。三、链表的基本操作链表的访问与遍历编写程序五、思考与练习1.画出双向链表和循环链表在内存中的存储模式图。2.编程实现双向链表节点的创建、增加、删除及显示等。3.从应用场景、组织结构、操作特性方面区分数组和链表。观谢谢看 展开更多...... 收起↑ 资源预览