更多的理論細節能夠用《數據結構》嚴蔚敏 看幾遍,數據結構很重要是實現算法的很大一部分python
下面主要談談python怎麼實現算法
10.1 棧和隊列數組
棧:後進先出LIFO數據結構
隊列:先進先出FIFOapp
python 中使用list實如今這些功能函數
棧:壓棧 append() 退棧 pop()spa
隊列: 入隊 append() 出隊 pop(0).net
棧:設計
>>> stack = list() >>> stack.append(3) >>> stack.append(2) >>> stack.append(5) >>> stack.append(1) >>> stack [3, 2, 5, 1] >>> stack.pop() 1 >>> stack.pop() 5
隊列:指針
>>> queue = list() >>> queue.append(1) >>> queue.append(2) >>> queue.append(3) >>> queue.append(4) >>> queue.append(5) >>> queue [1, 2, 3, 4, 5] >>> queue.pop(0) 1 >>> queue.pop(0) 2 >>> queue [3, 4, 5]
鏈表&指針對象的數組實現
這些數據結構在python中就沒有存在的價值, 用list都能輕鬆實現
有根樹:
class Node: def __init__(self,data): self.left = None self.right = None self.parent = None self.data = data
給出一個結點代碼,後面的二叉搜索樹紅黑樹再具體討論。
散列表(哈希表)
」散列表是普通數組概念的推廣「一這句話來解釋散列表再好不過了.
能夠把數組當作散列函數爲hash(x) = x % MAX (MAX比因此值都大) 獲得的散列值 在這個下標下處理數據
優勢:很好的指望值
難點:哈希函數的設計和衝突處理
下面引用別人的總結:
散列表(python 使用dict):
>>> #初始化 >>> a = dict(one = 1,two = 2) >>> #訪問 >>> a['one'] 1 >>> #增長 >>> a['three'] = 3 >>> a {'three': 3, 'one': 1, 'two': 2} >>>
參考引用: