- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
“ ” “ ” 2.2 链表 双向链表 什么是双向链表? 双向链表(又称双链表)每个节点有两个指针prev和next, 分别指向其前驱节点和后继节点,这样可以提供方便的双向 查找功能。 双向链表的表示? Dui=[[“吴坚”,-1,1],[“王林”,0,2], [“黄刚”,1,3],[“李丰”,2,-1]] 节点 (由数据区域和前驱节点指针、后继节点指针构成) 我前面没人 我后面没人 我后面是黄刚 双向链表的特性 双向链表中当节点中prev指向为-1(即指向为空)时,表示该节点为链表 中的首个节点;相对的,当节点中next指向为-1时,表示该节点为链表中 的最后一个节点。 下图所示为用二维列表表示一个长度为6的双向链表 data 1 ^ data 2 data 3 data 4 data 5 data 6 列表名data 列表索引 数据域 prev指针 next指针 0 data6 4 -1 1 data4 5 4 2 data1 -1 3 3 data2 2 5 4 data5 1 0 5 data3 3 1 head 双向链表的基本操作 一、双向链表的创建 Python中可以使用二维列表来模拟双向链表,用包含三个元素的列表来 表示每一个节点,其中第一个元素存储数据,第二、三个元素分别存储 前驱指针prev和后继指针next。 创建一个拥有2个节点的双向链表dblinklist的代码如下: dblinklist=[[6,-1,1],[8,0,-1],] head=0 创建一个空链表dblinklist的代码如下: dblinklist=[] head=-1 二、双向链表节点的访问 链表节点只能通过头指针(head)进行访问,其他节点通过节点间的next指针 依次访问。 可以设计如下自定义函数输出链表的所有节点: def shuchu(a,head): p=head while a[p][2]!=-1 print(a[p][0],end=“----”) p=a[p][2] print(a[p][0]) 三、双向链表节点的插入 链表节点的插入指的是根据新输入的实际数据形成节点,然后修改新节点与 其前驱与后继节点的指针,将新节点插入到链表的正确位置。 从链表头部插入一个新节点(头插法):例如,在双向链表a的头部插入一个新节点 node的代码如下: node=[random.randint(1,10),-1,head] a.append(node) if head!=-1: a[head][1]=len(a)-1 head=len(a)-1 在链表a的索引p之后插入一个新节点,可以设计自定义函数如下:: Def insert_behind(a,p,data): node=[data,p,a[p][2]] a.append(node) if a[p][2]!=-1: a[a[p][2]][1]=len(a)-1 a[p][2]=len(a)-1 四、双向链表节点的删除 双向链表节点的删除操作比单向链表要简单,它无需查找前驱节点,只需 判断被删除的节点是否有前驱节点或后继节点,然后修改相关指针即可。 尾结点可以直接删除,若删除了头节点,则需要修改头指针。 可设计自定义函数删除索引为p的节点,代码如下: Def delete(a,head,p): if a[p][1]!=-1: a[a[p][1]][2]=a[p][2] if a[p][2]!=-1: a[a[p][2]][1]=a[p][1] if head==p: head=a[head][2] return head 1.Python中可以使用二维列表来模拟双向链表,用包含三个元素的 列表来表示每一个节点,其中第一个元素存储数据,第二、三个元素 分别存储前驱指针prev和后继指针next。下列代码创建了一个拥有4 个节点的双链表a: a=[[2,2,3],[8,3,-1],[0,-1,0],[4,0,1]] head=2 则其头节点和尾结点数据域的值分别为: A.2和4 B.0和8 C.8和0 D.3和-1 B 练 习 2.Python中可以使用二维列表来模拟双向链表,用包含三个元素的 列表来表示每一个节点,其中第1个元素存储数据,第二、三个元素 分别存储前驱指针prev和后继指针next;同时双向链表使用头指针 head指向第一个节点在列表中的索引。 下列代码创建了一个双向链表a: a=[[2,2,5],[8,0,5],[0,-1,0
您可能关注的文档
- 1-1数据及其特征 课件 高中信息技术粤教版必修1.ppt
- 1-2 数据、信息、知识 课件浙教版高中信息技术必修1.ppt
- 1-2数据编码-1 课件 高中信息技术粤教版必修1.ppt
- 1-2数据编码-2 课件 高中信息技术粤教版必修1.ppt
- 1-2数据编码-3 课件 高中信息技术粤教版必修1.ppt
- 1-2信息系统的组成与功能 课件浙教版高中信息技术必修2.ppt
- 1-3数据采集与编码(一) 课件浙教版高中信息技术必修1.ppt
- 1-3信息系统的应用 课件浙教版高中信息技术必修2.ppt
- 1-4-信息社会及其发展 课件浙教版高中信息技术必修2.ppt
- 2-1-1计算机硬件组成 课件浙教版高中信息技术必修2.ppt
- 循环结构——while语句 教科版高中信息技术必修一课件.ppt
- 粤教版 高中信息技术 必修一 6-2-1 智能制造 课件.ppt
- 粤教版 高中信息技术 必修一 6-2-2 智能家居 课件.ppt
- 浙教版(2019)信息技术 必修2 网络应用的开发与规划设计教学课件.ppt
- 高中信息技术华东师大版必修一全册课件.ppt
- 编程计算 程序设计练习 教科版高中信息技术必修一教案.pdf
- 分支结构——条件语句 教科版高中信息技术必修一教案.pdf
- 函数与代码复用 教科版高中信息技术必修一教案.pdf
- 计算机解决问题的过程 教科版高中信息技术必修一教案.pdf
- 加密与解密 教科版高中信息技术必修一教案.pdf
文档评论(0)