雙向鍊錶的簡單實現

2022-09-15 04:09:13 字數 2881 閱讀 5883

雙向鍊錶的特點是:第乙個元素的 prev 是none

1

#雙向鍊錶:

2class

node:

3def

__init__(self, node=none, prev=none, next=none):4#

注意順序,因為例項化,一般不會關鍵字傳參, 如果node= none(1) 1 是給node形參的,如果形參列表不同,則會出現異常

5 self.prev =prev

6 self.node =node

7 self.next =next89

def__repr__

(self):

10return

'{} {}

'.format(

11 self.prev.node if self.prev else

none,

12self.node,

13 none if self.next is none else

self.next.node)

1415

class

doublelinklist:

16def

__init__(self, head= none, tail=none):

17 self.head =head

18 self.tail =tail

19 self.lens =0

2021

def22 node =node(node)

23if self.head is

none:

24 self.head =node

25else

:26 self.tail.next =node

27 node.prev =self.tail

28 self.tail =node

29 self.lens += 1

3031

def iternode(self, reverse=true):

32if self.head is

none:

33raise exception('

this is a emppty linklist')

34 current = self.head if reverse else

self.tail

35while

current:

36yield

current

37 current = current.next if reverse else

current.prev

3839

def__iter__

(self):

40if self.head is

none:

41raise exception('

this is a emppty linklist')

42 current =self.head

43while

current:

44yield

current

45 current =current.next

4647

def__getitem__

(self, index):

48 reverse = true if index>=0 else

false

49 start = 0 if index>=0 else 1

50for i, v in

enumerate(ll.iternode(reverse), start):

51if i ==abs(index):

52returnv53

54def

__setitem__

(self, index, value):

55 ll[index].node =value

5657

def__len__

(self):

58return

self.len

5960

defremove(self):

61pass62#

先判斷是否為空63#

需要遍歷,利用iter64#

注意是中間,第乙個,還是尾部刪除

6566

defpop(self):

67pass68#

值刪除尾部,self.tail.next = none

6970

definsert(self, index):

71pass72#

類似於remove

7374

7576 ll =doublelinklist()

8283

for i in

ll.iternode(false):

84print

(i)85

print('

----

'* 20)

86print(ll[-1])

8788 ll[-1] = 10000

89print(ll[-1])

部分列印結果:

C 實現簡單的雙向鍊錶

vs2013下編譯執行,實現了雙向鍊錶類list 的 建構函式,拷貝構造 析構函式 賦值運算子過載 清空 頭插 頭刪 尾插 尾刪 插入 刪除 逆序和刪除鍊錶中重複的資料值函式等。直接貼 dulist.h 類宣告 定義 成員函式定義。pragma once 雙向鍊錶 include includeus...

雙向鍊錶實現

template class link link link pre null,link ne null void operator new size t void operator delete void ptr template link link freelist null template v...

雙向鍊錶實現

雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...