資料結構是電腦科學必須掌握的一門學問,很多的教材都是用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函式裡面...