資料結構與演算法(二):python 單向鍊錶及其排序
資料結構與演算法(三):python實現雙向鍊錶並遍歷
今天分別對單鏈表和雙向鍊錶新增迴圈,使之分別成為迴圈單鏈表、迴圈雙向鍊錶。
本次實現,均使用了哨兵結點,也即在建立鍊錶之前的初始化部分,已經自動建立了乙個內容為none的節點,這樣做的目的是為了在後續插入其他結點時,可以不用考慮原煉表為空的邊界條件。
廢話少說,直接上碼:
class node(object):
def __init__(self, data, next=none):
self.data = data
self.next = next
class circlesinglylinkedlist(object):
def __init__(self):
"""初始化迴圈單鏈表時,建立了乙個哨兵結點,使得後續插入結點不用考慮邊界
"""self.headnode = node(none)
self.headnode.next = self.headnode
self.length = 0
def crt_from_list(self, l):
"""尾插法:每次在尾部插入乙個結點
"""h = self.headnode
for l in l:
h.next = node(l, next=self.headnode)
h = h.next
self.length += 1
def lineprint(self):
if self.headnode == self.headnode.next:
print("null")
return
p = self.headnode.next
print(p.data)
while p.next != self.headnode:
print(p.next.data)
p = p.next
if __name__ == "__main__":
cll = circlesinglylinkedlist()
cll.crt_from_list([0,'a',2])
print('迴圈單鏈表遍歷:')
cll.lineprint()
class binode(object):
"""雙向鍊錶的node類
"""def __init__(self, data, next=none, previous=none):
self.data = data
self.next = next
self.previous = previous
class circlebilinkedlist(object):
def __init__(self):
"""初始化時,建立乙個哨兵結點
"""self.headnode = binode(none)
self.headnode.next = self.headnode
self.headnode.previous = self.headnode
self.length = 0
def crtfromlist(self, l):
"""從乙個列表l建立乙個迴圈雙向鍊錶
"""h = self.headnode
for l in l:
h.next = binode(l, next=self.headnode, previous=h)
self.headnode.previous = h.next
h = h.next
def cbprint(self, mode = 'forward'):
"""迴圈雙向遍歷鍊錶
mode:遍歷方式,包括從前往後('forward'/0)、從後往前('backward'/1)
"""if mode == 'forward' or mode == 0:
p = self.headnode.next
while p != self.headnode:
print(p.data)
p = p.next
elif mode == 'backward' or mode == 1:
p = self.headnode.previous
while p != self.headnode:
print(p.data)
p = p.previous
if __name__ == "__main__":
print("迴圈雙向鍊錶遍歷:")
cb = circlebilinkedlist()
print("從前往後:")
cb.crtfromlist(['a','b','c'])
cb.cbprint(mode='forward')
print("從後往前:")
cb.cbprint(mode='backward')
資料結構 雙向迴圈鍊錶
近期我在學習資料結構,於是我自己整理了單鏈表 迴圈單鏈表 雙向鍊錶 雙向迴圈鍊錶的相關 以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下 時發現問題糾正於我,一起 cycdoublelist.h ifndef cycdoublelish h define cycdoublelish h...
資料結構 雙向迴圈鍊錶
typedef struct node node,pnode pnode init dc list void 雙向迴圈鍊錶的初始化 pnode new node int dat 新建乙個節點 把位址為pnew的節點插入到雙向迴圈鍊錶的尾部 頭節點的前面 bool list add tail pnod...
資料結構 雙向鍊錶,迴圈鍊錶
也許是自己太小看資料結構,練習了幾天還在第二章徘徊,可自己覺得基礎還是要打牢的好 總結一下 第乙個是雙向鍊錶,include include typedef struct node node,linklist void creat linklist l else int insert linklis...