资源简介 (共33张PPT)链 表1、链表是为了解决什么问题而发明的为了解决动态数量的数据存储2、有没有更优方案121、链表是为了解决什么问题而发明的为了解决动态数量的数据存储2、有没有更优方案概念节点a2c-1b1head=0头指针p=head 指针p=a[p][1] 后继指针链表概念链表是指将需要处理的数据对象以节点的形式,通过指针串联在一起的一种数据结构。空间 时间链表数组如何创建列表a=[ ] #创建空列表head=-1a.append([“a”,1]) #添加元素a = [ ["c", 3], ["e", -1], ["a", 4], ["d", 1], ["b", 0] ]p = headwhile p != -1:print(a[p][0], end="->")p = a[p][1]链表的访问(全部元素的遍历)输出结果:a->b->c->d->e->?head=2a = [ ["c", 3], ["e", -1], ["a", 4], ["d", 1], ["b", 0] ]p = headwhile a[p][1] != -1:print(a[p][0], end="->")p = a[p][1](遍历)输出结果:a->b->c->d->e?head=2print(a[p][0])a[p][1] ! = -1:a = [ ["c", 3], ["e", -1], ["a", 4], ["d", 1], ["b", 0] ]在头结点插入一个大写字母Ab= ["A", 5]a.append(b)len(a)5是怎么来的?代码实现总结反思链表的访问(全部元素的遍历)链表da = [["c", 3], ["e", -1], ["a", 4], ["d", 1], ["b", 0]]head = 2p = headwhile da[p][1] != -1:print(da[p][0], end="->")p = da[p][1]print(da[p][0])输出结果:a->b->c->d->e单向链表节点的插入链表节点的插入指的是根据新输入的实际数据形成节点,然后修改新节点与其前驱节点的指针,将新节点插入到链表的正确位置。①从头部插入新节点nextdata1nextdata2nextdata3-1head单向链表从头部插入新节点new datanextdata1nextdata3data2next-1head代码实现a=[["data1",1],["data2",2],["data3",-1]]head=0a.append(["new_data",head])head=len(a)-1从中间或者尾部插入新节点该怎么实现呢?0 data8 -11 data3 72 data1 63 data6 54 data5 35 data7 06 data2 17 data4 4head列表名data列表索引0 data8 -11 data3 72 data1 63 data6 54 data5 35 data7 06 data2 17 data4 40 data8 -11 data32 data1 63 data6 54 data5 35 data7 06 data2 17 data4 48 newheadhead列表名data列表索引列表名data列表索引在第3个节点,即data3节点后插入新节点78②从中间插入新节点a=[["data1",1],["data2",2],["data3",-1]]head=0p=0a.append(["new_data",a[p][1]])a[p][1]=len(a)-1③从尾部插入新节点a=[["data1",1],["data2",2],["data3",-1]]head=0p=headWhile a[p][1]!=-1:p=a[p][1]a.append(["new_data",-1)a[p][1]= len(a)-1单向链表节点的删除删除单向链表的节点有三种情形:删除头节点、删除中间节点和删除尾节点。data1nextdata2nextdata3-1headdata1nextdata2nextheaddata3-1单向链表删除头节点代码实现a=[["data1",1],["data2",2],["data3",-1]]head=0head=a[head][1]data1nextdata2nextdata3-1headdata1nextdata2nextdata3-1head××>data1nextdata2nextdata3-1headdata1nextnexthead×>单向链表删除中间节点代码实现a=[["data1",1],["data2",2],["data3",-1]]head=0pre=0p=a[pre][1]a[pre][1]=a[p][1]data1nextdata2nextdata3-1headheaddata1nextdata2nextdata3-1×单向链表删除尾部节点代码实现a=[["data1",1],["data2",2],["data3",-1]]head=0pre=headwhile a[a[pre][1]][1]!=-1:pre=a[pre][1]a[pre][1]=-1链表节点的删除,并没有将元素从列表中删除,而仅仅是修改了节点指针域的值,通过将被删除节点的前驱节点和其后继节点直接相连的方式实现。尾节点可以直接删除,若删除了头节点,则需要修改头指针。删除节点小结:练一练1.使用python 的二维列表来模拟单向链表,如下代码创建了一个拥有4个节点的链表a:a=[[“hello”,1],[“china”,3],[“Olympics”,-1],[“winter”,2]]head=0①a[1][1]的值为:A.1 B.2 C.0 D.3②依次输出各节点数据域的值,则输出内容为__________________________________DhellochinawinterOlympics2.单向链表中插入新节点的过程如图所示。使用python的二维列表来模拟单向链表,已知插入节点前列表a=[[“红”,1],[“橙”,2],[“绿”,3],[“青”,-1]],则在删除节点“橙”之后,列表a的值为[[“红”,1],[“绿”,3],[“青”,-1]][[“红”,1],[“绿”,2],[“青”,-1]][[“红”,1],[“橙”,2],[“绿”,3],[“青”,-1]][[“红”,2],[“橙”,2],[“绿”,3],[“青”,-1]]D3.在下列列表中将新节点插入到data2和data3中间,则下列步骤不需要的是:data1nextdata2nextdata3nextdata4nextnew datanextA.断开data2与data3的连接B.断开data3与data4的连接C.使new data的指针指向data3D.使data2的指针指向new dataB4.有如下python程序段,表示一个链表及操作:a=[[5,-1],[9,4],[7,3],[2,1],[6,0]]head=2p=headb=[ ]While a[p][1]!=-1:b.append(a[p][0])p=a[p][1]b.append(a[p][0])print(b)程序执行后,输出的结果为:A.[7,2,9,6,5,5] B.[5,9,7,2,6] C.[7,2,9,6,5] D.[2,9,6]C 展开更多...... 收起↑ 资源预览