新聞中心
什么是堆棧?

堆棧是一個數(shù)據(jù)結構,其存儲在一個后進/先出的方式的項目。這通常被稱為LIFO。這與隊列形成對比,隊列以先入/先出(FIFO)方式存儲項目。
使用list創(chuàng)建一個python堆棧
list您可能經(jīng)常在程序中使用的內(nèi)置結構可用作堆棧。相反的.push(),你可以使用.append()新的元素添加到您的堆棧的頂部,同時.pop()除去了LIFO順序的元素:
>>> myStack = []
>>> myStack.append('a')
>>> myStack.append('b')
>>> myStack.append('c')
>>> myStack
['a', 'b', 'c']
>>> myStack.pop()
'c'
>>> myStack.pop()
'b'
>>> myStack.pop()
'a'
>>> myStack.pop()
Traceback (most recent call last):
File "", line 1, in
IndexError: pop from empty list 你可以在最后的命令中看到,如果你調(diào)用空堆棧,list它將引發(fā)一個。IndexError.pop()
list有熟悉的優(yōu)點。你知道它是如何工作的,并且可能已經(jīng)在你的程序中使用它了。
不幸的是,list與其他數(shù)據(jù)結構相比,您會看到一些缺點。問題是隨著它的發(fā)展,它會遇到速度問題。list存儲a 中的項目的目的是提供對中的隨機元素的快速訪問list。在較高級別,這意味著項目在內(nèi)存中彼此相鄰存儲。
如果你的堆棧比當前擁有它的內(nèi)存塊大,那么Python需要做一些內(nèi)存分配。這可能導致一些.append()呼叫比其他呼叫花費更長的時間。
還有一個不太嚴重的問題。如果您使用.insert()在末尾以外的位置向堆棧添加元素,則可能需要更長時間。但是,這通常不是你要對堆棧做的事情。
下一個數(shù)據(jù)結構將幫助您解決您看到的重新分配問題list。
使用collections.deque創(chuàng)建一個Python堆棧
該collections模塊包含deque,這對于創(chuàng)建Python堆棧很有用。deque發(fā)音為“deck”,代表“雙端隊列”。
您可以使用同樣的方法deque,你上面看到的list,.append()和.pop():
>>> from collections import deque
>>> myStack = deque()
>>> myStack.append('a')
>>> myStack.append('b')
>>> myStack.append('c')
>>> myStack
deque(['a', 'b', 'c'])
>>> myStack.pop()
'c'
>>> myStack.pop()
'b'
>>> myStack.pop()
'a'
>>> myStack.pop()
Traceback (most recent call last):
File "", line 1, in
IndexError: pop from an empty deque 這看起來幾乎與list上面的例子相同。此時,您可能想知道為什么Python核心開發(fā)人員會創(chuàng)建兩個看起來相同的數(shù)據(jù)結構。
當前文章:創(chuàng)新互聯(lián)Python教程:使用Python實現(xiàn)一個堆棧結構
網(wǎng)站鏈接:http://m.5511xx.com/article/dpgidsi.html


咨詢
建站咨詢
