迴圈單鏈表

2021-10-18 19:08:58 字數 2311 閱讀 7718

單鏈表的缺點:尾端加入元素操作的效率低,因為這時只能從表頭開始查詢,直至找到表的最後乙個結點,而後才能鏈結新結點

迴圈單鏈表: 最後乙個結點的next域不用none,而是指向表的最後乙個結點

實現迴圈單鏈表,採用b), 這樣可以同時支援o(1)時間的表頭/表尾插入和o(1)時間的表頭刪除,哪個結點算是表頭或表尾,主要是概念問題,從表的內部形態上無法區分

這種表物件只需要乙個資料域_rear, 它在邏輯上始終引用這錶的尾結點,前端加入結點,就是在尾端結點和首結點之間加入新的首結點,尾結點引用不變

尾端加入結點在原尾結點之後插入新結點,只是插入後要把它作為新的尾結點,因此需要更新尾結點引用

上面這兩個操作都要考慮空表插入的特殊情況

class

node

:def

__init__

(self, elem)

: self.elem = elem

self.pnext =

none

def__repr__

(self)

:# 這個函式將內容『友好』地顯示出來,否則會顯示物件的記憶體位址

return

str(self.elem)

class

lclist

:def

__init__

(self)

: self.rear =

none

defis_empty

(self)

:"""

判斷該鍊錶是否為空

:return: boolean

"""return self.rear ==

none

defprepend

(self, elem)

:# 前端插入

p = node(elem)

if self.rear is

none

: p.pnext = p # 建立乙個結點的環

self.rear = p

else

: p.pnext = self.rear.pnext

self.rear.pnext = p

def(self, elem)

:# 尾端插入

self.prepend(elem)

self.rear = self.rear.pnext

defpop_start

(self)

:# 前端彈出

if self.rear is

none

:print

("the list is none."

)return

p = self.rear.pnext

if self.rear is p:

# 如果只有乙個元素

self.rear =

none

else

: self.rear.pnext = p.pnext # 令rear的指標等於第二個元素的位址

return p.elem

defprintall

(self)

:if self.is_empty():

return

p = self.rear.pnext

print

("head"

, end=

' ')

while

true

:print

("-->"

, p.elem, end=

' ')

if p is self.rear:

break

p = p.pnext

print

("--> none. linked node finished"

)if __name__ ==

'__main__'

: node1 = node(elem=

'node1'

) node2 = node(elem=

'node2'

) lclist = lclist(

) lclist.printall(

)print

(lclist.pop_start())

lclist.printall(

)

e2)

lclist.printall()

print(lclist.pop_start())

lclist.printall()

迴圈單鏈表

include include include include define random x rand x typedef int status typedef int elemtype typedef struct lnode lnode typedef struct linklist link...

迴圈單鏈表

include includetypedef struct node snode snode creat 建立頭結點 t next head 和迴圈雙向鍊錶一樣 在這改就行了 return head int lenth snode l 求鍊錶的長度 return len snode get snod...

迴圈單鏈表

資料結構中迴圈單鏈表的簡單實現以及一些簡單操作的測試。迴圈單鏈表的簡單實現 include include define elemtype char define maxsize 50 using namespace std 定義結構 typedef struct listnode linklist...