python堆栈与队列_python:用deque实现栈,队列和保存最后的N个元素
棧其實就是一個后進先出的隊列,而一般意義的隊列指的是FIFO隊列(先進先出)。
標準庫的collections.deque是個雙端隊列,可以輕松實現這兩個數據結構。
ps:雖然直接用python的list去做也行,但會比deque慢一些,因為list的實際數據結構導致在首尾插入或刪除元素的時候比deque慢。
棧的實現:
from collections import deque
dq = deque()? #初始化一個新的deque,當然也可以傳入諸如list這樣的東西初始化。
dq.pop()? # 彈棧并返回
dq.append(x)? #壓棧
len(dq)? #棧大小
dq[-1]? #取棧頂元素
FIFO隊列的實現:
dq = deque()? #初始化一個新的deque,當然也可以傳入諸如list這樣的東西初始化。
dq.popleft()??#隊首彈出元素,并返回
dq.append(x)? #壓元素入隊列尾
len(dq)? #棧大小
dq[0]? #取隊尾
dq[-1]取隊首
當然除了實現棧和FIFO隊列,本身就是個雙端隊列,兩頭都可以插入和刪除元素,同時支持循環左移或右移操作。
dq.pop() ? #隊尾出 并返回
dq,popleft() ?#隊首出 ?并返回
len(dq) ? #size
dq.append() ? # 隊尾入
dq.appendleft() ?#隊首入
dq.rotate(n) ? ?#循環左移(n<0) ?右移(n>0)
實現保存最后N個元素
即利用deque的maxlen參數,當deque已經滿了,再在末尾插入元素的時候回刪除隊首的元素。
ps:在隊列已滿的時候,在隊首插入元素,會把隊尾的元素刪除。
>>> from collections import deque
>>> dq = deque(maxlen=3)
>>> dq.append(1)
>>> dq.append(2)
>>> dq.append(3)
>>> dq
deque([1, 2, 3], maxlen=3)
>>> dq.append(4)
>>> dq
deque([2, 3, 4], maxlen=3)
>>> dq.append(5)
>>> dq
deque([3, 4, 5], maxlen=3)
總結
以上是生活随笔為你收集整理的python堆栈与队列_python:用deque实现栈,队列和保存最后的N个元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV-C++ Canny算法介绍
- 下一篇: python numpy安装教程_手把手