python資料結構 鍊錶

2021-09-11 02:53:38 字數 3577 閱讀 5628

資料結構是電腦科學必須掌握的一門學問,很多的教材都是用c語言實現鍊錶,因為c有指標,可以很方便的控制記憶體,很方便就實現鍊錶,其他的語言,則沒那麼方便,有很多都是用模擬鍊錶,因為python是動態語言,可以直接把物件賦值給新的變數。在c/c++中,通常採用「指標+結構體」來實現鍊錶;而在python中,則可以採用「引用+類」來實現鍊錶。

鍊錶是通過乙個個節點(node)組成的,每個節點都包含了稱為資料域(value)和指標域(next)的基本單元,它也是一種遞迴的資料結構。它能保持資料之間的邏輯順序,但儲存空間不必按照順序儲存。

鍊錶的基本元素有:

head:head節點永遠指向第乙個節點

tail: tail永遠指向最後乙個節點

none:鍊錶中最後乙個節點的指標域為none值

三、單向鍊錶屬性與各類操作方法**

在c語言中,我們定義插入、刪除靠得是指標來實現,引入一篇部落格,裡面的**釋的很清楚。鍊錶的插入、刪除的處理

//c語言的** 關於鍊錶排序的**

//解釋下我的思路,鍊錶排序,理論上是數字在變換,但是我們要用鍊錶來控制数字變化比較

//用的演算法依然是,冒泡法,和正常排序沒什麼區別。

//等效與陣列,這兒只不過是用指標來確定data位置

viod sort()}}

}

但是python中沒有指標,實現插入、刪除、替換要怎麼去做??

python**的實現,我們用引用+類來實現。

#先定乙個node的類

class node(): #value + next

def __init__ (self, value = none, next = none):

self._value = value

self._next = next

def getvalue(self):

return self._value

def getnext(self):

return self._next

def setvalue(self,new_value):

self._value = new_value

def setnext(self,new_next):

self._next = new_next

#實現linked list及其各類操作方法

class linkedlist():

def __init__(self): #初始化鍊錶為空表

self._head = node()

self._tail = none

self._length = 0

#檢測是否為空

def isempty(self):

return self._head == none

#add在鍊錶前端新增元素:o(1)

def add(self,value):

newnode = node(value,none) #create乙個node(為了插進乙個鍊錶)

newnode.setnext(self._head)

self._head = newnode

newnode = node(value)

if self.isempty():

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

else:

current = self._head

while current.getnext() != none:

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

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

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

def search(self,value):

current=self._head

foundvalue = false

while current != none and not foundvalue:

if current.getvalue() == value:

foundvalue = true

else:

current=current.getnext()

return foundvalue

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

def index(self,value):

current = self._head

count = 0

found = none

while current != none and not found:

count += 1

if current.getvalue()==value:

found = true

else:

current=current.getnext()

if found:

return count

else:

raise valueerror ('%s is not in linkedlist'%value)

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

def remove(self,value):

current = self._head

pre = none

while current!=none:

if current.getvalue() == value:

if not pre:

self._head = current.getnext()

else:

pre.setnext(current.getnext())

break

else:

pre = current

current = current.getnext()

#insert鍊錶中插入元素

def insert(self,pos,value):

if pos <= 1:

self.add(value)

elif pos > self.size():

else:

temp = node(value)

count = 1

pre = none

current = self._head

while count < pos:

count += 1

pre = current

current = current.getnext()

pre.setnext(temp)

temp.setnext(current)

python資料結構之鍊錶

鍊錶 linked list 由於python是動態語言,可以直接把物件賦值給新的變數,於是在python一切皆為物件的原理上實現鍊錶的各項操作。在實現鍊錶python類的屬性和方法操作之前,先整理一些鍊錶的理論知識。一 鍊錶的基本結構鍊錶是通過乙個個節點 node 組成的,每個節點都包含了稱為資料...

資料結構 鍊錶(Python實現)

鍊錶這個資料結構在我們做題時非常常見,鍊錶上的每乙個元素都包含了兩個值,乙個值是自身的值,另外乙個值則是指向下乙個元素的位址,這樣一整個鍊錶才能夠串連起來。如下所示 其中第乙個為單鏈表,每乙個元素都指向了下乙個元素,最後乙個元素指向了none。那麼我們如何使用python來實現乙個最基本的單鏈表呢?...

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...