新聞中心
什么是堆棧?

堆棧是一個數(shù)據(jù)結(jié)構(gòu),其存儲在一個后進(jìn)/先出的方式的項目。這通常被稱為LIFO。這與隊列形成對比,隊列以先入/先出(FIFO)方式存儲項目。
使用list創(chuàng)建一個python堆棧
list您可能經(jīng)常在程序中使用的內(nèi)置結(jié)構(gòu)可用作堆棧。相反的.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ù)結(jié)構(gòu)相比,您會看到一些缺點。問題是隨著它的發(fā)展,它會遇到速度問題。list存儲a 中的項目的目的是提供對中的隨機(jī)元素的快速訪問list。在較高級別,這意味著項目在內(nèi)存中彼此相鄰存儲。
如果你的堆棧比當(dāng)前擁有它的內(nèi)存塊大,那么Python需要做一些內(nèi)存分配。這可能導(dǎo)致一些.append()呼叫比其他呼叫花費更長的時間。
還有一個不太嚴(yán)重的問題。如果您使用.insert()在末尾以外的位置向堆棧添加元素,則可能需要更長時間。但是,這通常不是你要對堆棧做的事情。
下一個數(shù)據(jù)結(jié)構(gòu)將幫助您解決您看到的重新分配問題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ù)結(jié)構(gòu)。
當(dāng)前題目:創(chuàng)新互聯(lián)Python教程:使用Python實現(xiàn)一個堆棧結(jié)構(gòu)
文章源于:http://www.5511xx.com/article/dpgidsi.html


咨詢
建站咨詢
