python 節(jié)點(diǎn)
在有些情況下,存儲(chǔ)數(shù)據(jù)的內(nèi)存分配不能位于連續(xù)的內(nèi)存塊中。所以我們接受指針的幫助,其中數(shù)據(jù)和數(shù)據(jù)元素的下一個(gè)位置的地址也被存儲(chǔ)。所以我們從當(dāng)前數(shù)據(jù)元素的值中知道下一個(gè)數(shù)據(jù)元素的地址。通常這樣的結(jié)構(gòu)被稱為指針。但在python中,我們將它們稱為節(jié)點(diǎn)。
節(jié)點(diǎn)是各種其他數(shù)據(jù)結(jié)構(gòu)鏈接列表和發(fā)can可以在python中處理的基礎(chǔ)。
創(chuàng)建節(jié)點(diǎn)
這些節(jié)點(diǎn)是通過實(shí)現(xiàn)一個(gè)將保存指針和數(shù)據(jù)元素的類來創(chuàng)建的。在下面的例子中,我們創(chuàng)建了一個(gè)名為daynames的類來保存星期幾的名稱。nextval指針被初始化為空和三個(gè)節(jié)點(diǎn),并用值初始化,如圖所示。
節(jié)點(diǎn)e1的下一個(gè)指針指向e3,而節(jié)點(diǎn)e3的下一個(gè)指針指向e2。
class daynames: def __init__(self, dataval=none): self.dataval = dataval self.nextval = none e1 = daynames('mon') e2 = daynames('tue') e3 = daynames('wed') e1.nextval = e3 e3.nextval = e2
遍歷節(jié)點(diǎn)元素
我們可以通過創(chuàng)建一個(gè)變量并為其分配第一個(gè)元素來遍歷上面創(chuàng)建的節(jié)點(diǎn)的元素。然后我們使用while循環(huán)和nextval指針來打印出所有的節(jié)點(diǎn)元素。請(qǐng)注意,我們還有一個(gè)額外的數(shù)據(jù)元素,并將nextval指針正確排列,以便按照正確的順序?qū)⑤敵龀尸F(xiàn)為一周的幾天。
class daynames: def __init__(self, dataval=none): self.dataval = dataval self.nextval = none e1 = daynames('mon') e2 = daynames('wed') e3 = daynames('tue') e4 = daynames('thu') e1.nextval = e3 e3.nextval = e2 e2.nextval = e4 thisvalue = e1 while thisvalue: print(thisvalue.dataval) thisvalue = thisvalue.nextval
當(dāng)上面的代碼執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果。
mon tue wed thu
插入和刪除等附加操作可以通過在鏈接列表和樹等通用數(shù)據(jù)結(jié)構(gòu)中使用此節(jié)點(diǎn)容器來實(shí)現(xiàn)適當(dāng)?shù)姆椒▉硗瓿?。所以我們?cè)诮酉聛淼恼鹿?jié)中對(duì)它們進(jìn)行研究。