日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python堆栈与队列_python:用deque实现栈,队列和保存最后的N个元素

發布時間:2023/12/19 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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个元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。