資源簡(jiǎn)介 (共33張PPT)鏈 表1、鏈表是為了解決什么問(wèn)題而發(fā)明的為了解決動(dòng)態(tài)數(shù)量的數(shù)據(jù)存儲(chǔ)2、有沒(méi)有更優(yōu)方案121、鏈表是為了解決什么問(wèn)題而發(fā)明的為了解決動(dòng)態(tài)數(shù)量的數(shù)據(jù)存儲(chǔ)2、有沒(méi)有更優(yōu)方案概念節(jié)點(diǎn)a2c-1b1head=0頭指針p=head 指針p=a[p][1] 后繼指針鏈表概念鏈表是指將需要處理的數(shù)據(jù)對(duì)象以節(jié)點(diǎn)的形式,通過(guò)指針串聯(lián)在一起的一種數(shù)據(jù)結(jié)構(gòu)。空間 時(shí)間鏈表數(shù)組如何創(chuàng)建列表a=[ ] #創(chuàng)建空列表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]鏈表的訪問(wèn)(全部元素的遍歷)輸出結(jié)果: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](遍歷)輸出結(jié)果: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] ]在頭結(jié)點(diǎn)插入一個(gè)大寫(xiě)字母Ab= ["A", 5]a.append(b)len(a)5是怎么來(lái)的?代碼實(shí)現(xiàn)總結(jié)反思鏈表的訪問(wèn)(全部元素的遍歷)鏈表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])輸出結(jié)果:a->b->c->d->e單向鏈表節(jié)點(diǎn)的插入鏈表節(jié)點(diǎn)的插入指的是根據(jù)新輸入的實(shí)際數(shù)據(jù)形成節(jié)點(diǎn),然后修改新節(jié)點(diǎn)與其前驅(qū)節(jié)點(diǎn)的指針,將新節(jié)點(diǎn)插入到鏈表的正確位置。①?gòu)念^部插入新節(jié)點(diǎn)nextdata1nextdata2nextdata3-1head單向鏈表從頭部插入新節(jié)點(diǎn)new datanextdata1nextdata3data2next-1head代碼實(shí)現(xiàn)a=[["data1",1],["data2",2],["data3",-1]]head=0a.append(["new_data",head])head=len(a)-1從中間或者尾部插入新節(jié)點(diǎn)該怎么實(shí)現(xiàn)呢?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個(gè)節(jié)點(diǎn),即data3節(jié)點(diǎn)后插入新節(jié)點(diǎn)78②從中間插入新節(jié)點(diǎn)a=[["data1",1],["data2",2],["data3",-1]]head=0p=0a.append(["new_data",a[p][1]])a[p][1]=len(a)-1③從尾部插入新節(jié)點(diǎn)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單向鏈表節(jié)點(diǎn)的刪除刪除單向鏈表的節(jié)點(diǎn)有三種情形:刪除頭節(jié)點(diǎn)、刪除中間節(jié)點(diǎn)和刪除尾節(jié)點(diǎn)。data1nextdata2nextdata3-1headdata1nextdata2nextheaddata3-1單向鏈表刪除頭節(jié)點(diǎn)代碼實(shí)現(xiàn)a=[["data1",1],["data2",2],["data3",-1]]head=0head=a[head][1]data1nextdata2nextdata3-1headdata1nextdata2nextdata3-1head××>data1nextdata2nextdata3-1headdata1nextnexthead×>單向鏈表刪除中間節(jié)點(diǎn)代碼實(shí)現(xiàn)a=[["data1",1],["data2",2],["data3",-1]]head=0pre=0p=a[pre][1]a[pre][1]=a[p][1]data1nextdata2nextdata3-1headheaddata1nextdata2nextdata3-1×單向鏈表刪除尾部節(jié)點(diǎn)代碼實(shí)現(xiàn)a=[["data1",1],["data2",2],["data3",-1]]head=0pre=headwhile a[a[pre][1]][1]!=-1:pre=a[pre][1]a[pre][1]=-1鏈表節(jié)點(diǎn)的刪除,并沒(méi)有將元素從列表中刪除,而僅僅是修改了節(jié)點(diǎn)指針域的值,通過(guò)將被刪除節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)和其后繼節(jié)點(diǎn)直接相連的方式實(shí)現(xiàn)。尾節(jié)點(diǎn)可以直接刪除,若刪除了頭節(jié)點(diǎn),則需要修改頭指針。刪除節(jié)點(diǎn)小結(jié):練一練1.使用python 的二維列表來(lái)模擬單向鏈表,如下代碼創(chuàng)建了一個(gè)擁有4個(gè)節(jié)點(diǎn)的鏈表a:a=[[“hello”,1],[“china”,3],[“Olympics”,-1],[“winter”,2]]head=0①a[1][1]的值為:A.1 B.2 C.0 D.3②依次輸出各節(jié)點(diǎn)數(shù)據(jù)域的值,則輸出內(nèi)容為_(kāi)_________________________________DhellochinawinterOlympics2.單向鏈表中插入新節(jié)點(diǎn)的過(guò)程如圖所示。使用python的二維列表來(lái)模擬單向鏈表,已知插入節(jié)點(diǎn)前列表a=[[“紅”,1],[“橙”,2],[“綠”,3],[“青”,-1]],則在刪除節(jié)點(diǎn)“橙”之后,列表a的值為[[“紅”,1],[“綠”,3],[“青”,-1]][[“紅”,1],[“綠”,2],[“青”,-1]][[“紅”,1],[“橙”,2],[“綠”,3],[“青”,-1]][[“紅”,2],[“橙”,2],[“綠”,3],[“青”,-1]]D3.在下列列表中將新節(jié)點(diǎn)插入到data2和data3中間,則下列步驟不需要的是:data1nextdata2nextdata3nextdata4nextnew datanextA.斷開(kāi)data2與data3的連接B.斷開(kāi)data3與data4的連接C.使new data的指針指向data3D.使data2的指針指向new dataB4.有如下python程序段,表示一個(gè)鏈表及操作: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)程序執(zhí)行后,輸出的結(jié)果為:A.[7,2,9,6,5,5] B.[5,9,7,2,6] C.[7,2,9,6,5] D.[2,9,6]C 展開(kāi)更多...... 收起↑ 資源預(yù)覽 縮略圖、資源來(lái)源于二一教育資源庫(kù)