鍊錶之迴圈鍊錶

2021-10-01 10:39:00 字數 3821 閱讀 1006

單向鍊錶:鍊錶之單向鍊錶

迴圈鍊錶是單向鍊錶的變化形式。單向鍊錶的尾部的指標域是空的,而迴圈鍊錶的尾部指標是指向鍊錶的頭結點的,其結構如圖一所示。

圖 一循

環鏈表結

構圖一 迴圈鍊錶結構

圖一迴圈鍊錶

結構從上面結構可以看出,迴圈鍊錶的節點形成了乙個圈。在進行遍歷時,可以從任意節點開始。如果記錄了尾部節點的話,迴圈鍊錶的操作會方便很多,比如,可以實現o(1)時間的表頭/表尾插入和o(1)時間的表頭刪除。

is_empty() 鍊錶是否為空

length() 鍊錶的長度

scan() 遍歷鍊錶的節點

add(item) 頭部新增節點

insert(position,item) 中間插入節點

remove(item)移除指定節點

search(item) 查詢是否存在包含該元素的節點

以下是以python實現的**

class

node

:"""建立節點"""

def__init__

(self, data)

: self.data = data

self.

next

=none

class

cyclelinkedlist

(object):

"""建立迴圈鍊錶"""

def__init__

(self, node=

none):

self.rear = node

if node is

notnone

: self.rear.

next

= node

defis_empty

(self)

:"""鍊錶是否為空"""

return self.rear ==

none

deflength

(self)

:"""鍊錶長度"""

if self.rear is

none

:return

0else

: count =

0 curnode = self.rear.

next

while curnode:

count +=

1 curnode = curnode.

next

if curnode == self.rear.

next

:return count

defadd(self, item)

:"""頭部插入"""

"""儲存了self.rear屬性,使的找到頭節點很方便"""

node = node(item)

if self.is_empty():

self.rear = node

self.rear.

next

= node

else

: node.

next

= self.rear.

next

self.rear.

next

= node

def(self, item)

:"""尾端插入"""

"""先執行前端插入,再執行尾部指標移動"""

self.add(item)

# 頭部插入

self.rear = self.rear.

next

# 將尾部指標移動到新新增的節點處

definsert

(self, index, item)

:""""索引是index,節點是第index+1個節點"""

if index <=0:

self.add(item)

elif index > self.length()-

1:else

: node = node(item)

curnode = self.rear.

next

# 找到頭節點

count =

0while count < index -1:

curnode = curnode.

next

count +=

1 node.

next

= curnode.

next

curnode.

next

= node

defremove

(self, item)

:"""移除節點"""

if self.is_empty():

return

else

: curnode = self.rear.

next

precurnode =

none

while curnode:

if curnode.data == item:

if curnode == self.rear.

next

:# 要刪除的是頭節點

self.rear.

next

= curnode.

next

else

: precurnode.

next

= curnode.

next

break

precurnode = curnode

curnode = curnode.

next

defscan

(self)

:"""遍歷鍊錶"""

if self.rear is

none

:return

curnode = self.rear.

next

# 通過尾部指標獲取頭節點

while curnode:

print

(curnode.data, end=

' ')

curnode = curnode.

next

if curnode == self.rear.

next

:return

defsearch

(self, item)

: curnode = self.rear.

next

while curnode:

if curnode.data == item:

return

true

curnode = curnode.

next

if curnode.

next

== self.rear.

next

:return

return

false

# 測試**

cl = cyclelinkedlist(

)cl.add(1)

2)3)

5)cl.insert(3,

4)cl.remove(5)

print

(cl.search(3)

)cl.scan(

)

執行結果如下:

從執行結果上看,**執行正常,如有不合適之處,敬請指正,謝謝。

鍊錶演算法四之迴圈鍊錶

前面介紹了單鏈表的一些練習題,本節介紹迴圈鍊錶,顧名思義,肯定得迴圈起來,就是表中的最後乙個結點的指標指向頭結點,使整個鍊錶形成乙個環。根據前面單鏈表中介紹的頭插法和尾插法,稍微思考一下,就知道再迴圈鍊錶中應該選擇用尾插法這種方式來建立迴圈鍊錶,因為尾插法每次都是在鍊錶的末尾插入新的元素。和原來的尾...

迴圈鍊錶,雙向鍊錶

迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...

迴圈鍊錶企業鍊錶

一 特點 讓鍊錶的最後乙個結點的next指標指向頭結點。初始化小節點時直接讓next指標指向鍊錶的頭結點。二 include include include 小結點 typedef struct listnode listnode 鍊錶結點 typedef struct circularlist c...