Python 鍊錶的實現

2021-08-10 03:41:09 字數 3231 閱讀 1256

鍊錶由一系列不必在記憶體中相連的結構構成,這些物件按線性順序排序。每個結構含有表元素和指向後繼元素的指標。最後乙個單元的指標指向null。為了方便鍊錶的刪除與插入操作,可以為鍊錶新增乙個表頭。

刪除操作可以通過修改乙個指標來實現。

插入操作需要執行兩次指標調整。

1.1 node實現

每個node分為兩部分。一部分含有鍊錶的元素,可以稱為資料域;另一部分為一指標,指向下乙個node。

class

node

(): __slots__=['_item','_next'] #限定node例項的屬性

def__init__

(self,item):

self._item=item

self._next=none

#node的指標部分預設指向none

defgetitem

(self):

return self._item

defgetnext

(self):

return self._next

defsetitem

(self,newitem):

self._item=newitem

defsetnext

(self,newnext):

self._next=newnext

1.2 singlelinkedlist的實現

class

singlelinkedlist

():def

__init__

(self):

self._head=none

#初始化鍊錶為空表

self._size=0

1.3 檢測鍊錶是否為空

def

isempty

(self):

return self._head==none

1.4 add在鍊錶前端新增元素

def

add(self,item):

temp=node(item)

temp.setnext(self._head)

self._head=temp

def

(self,item):

temp=node(item)

if self.isempty():

self._head=temp #若為空表,將新增的元素設為第乙個元素

else:

current=self._head

while current.getnext()!=none:

current=current.getnext() #遍歷鍊錶

current.setnext(temp) #此時current為鍊錶最後的元素

1.6 search檢索元素是否在鍊錶中

def

search

(self,item):

current=self._head

founditem=false

while current!=none

andnot founditem:

if current.getitem()==item:

founditem=true

else:

current=current.getnext()

return founditem

1.7 index索引元素在鍊錶中的位置

def

index

(self,item):

current=self._head

count=0

found=none

while current!=none

andnot found:

count+=1

if current.getitem()==item:

found=true

else:

current=current.getnext()

if found:

return count

else:

raise valueerror,'%s is not in linkedlist'%item

1.8 remove刪除鍊錶中的某項元素

def

remove

(self,item):

current=self._head

pre=none

while current!=none:

if current.getitem()==item:

ifnot pre:

self._head=current.getnext()

else:

pre.setnext(current.getnext())

break

else:

pre=current

current=current.getnext()

1.9 insert鍊錶中插入元素

def

insert

(self,pos,item):

if pos<=1:

self.add(item)

elif pos>self.size():

else:

temp=node(item)

count=1

pre=none

current=self._head

while count1

pre=current

current=current.getnext()

pre.setnext(temp)

temp.setnext(current)

Python的單向鍊錶實現

思路 鍊錶由節點組成,先規定節點 node 包含data和指向下個節點的next 初始化data當然就是傳入的data了,next指向none 新增分兩種情況 鍊錶為空,那麼頭節點和尾節點都指向新插入的節點 鍊錶不為空,那麼直接在尾部新增即可 遍歷因為只有鍊錶的尾節點的next是指向none的,所以...

Python 實現單向鍊錶

鍊錶顧名思義就是 鏈 鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元存放資料元素。鍊錶中每乙個元素成為 結點 每乙個結點都是由資料域和指標域組成的。跟陣列不同鍊錶不用預先定義大小,而且硬體支援的話可以無限擴充套件。陣列需要預先定義大小,無法適應資料動態地增減,資料小於定義的長度會浪費記憶體,...

python 實現無序鍊錶

一 鍊錶的概念 二 python實現 1 定義乙個node類 class node object def init self,val self.data val self.next none def get data self return self.data def set data self,v...