最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中堆、棧、隊列之間的區(qū)別小結(jié)

 更新時間:2025年01月17日 10:10:32   作者:Python熱愛者  
本文主要介紹了Python中堆、棧、隊列之間的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、隊列概念

1、隊列是只有一端可以進行插入操作,而另一端可以進行刪除操作的有序線性存儲結(jié)構(gòu),滿足先進先出的約束。

2、在計算機科學中,隊列是一個集合,其中集合中的實體按順序保存,集合上的主要(或唯一)操作是向后端位置添加實體,稱為入隊,前端位置并刪除實體,稱為出隊。這使得隊列成為先進先出(FIFO)數(shù)據(jù)結(jié)構(gòu)。在FIFO數(shù)據(jù)結(jié)構(gòu)中,添加到隊列的第一個元素將是第一個要刪除的元素。這相當于一旦添加新元素,在刪除新元素之前必須刪除之前添加的所有元素的要求。通常偷看或還輸入了前面的操作,返回前面元素的值而不使其出列。隊列是線性數(shù)據(jù)結(jié)構(gòu)的示例,或者更抽象地是順序集合。

3、隊列提供計算機科學,運輸和運營研究中的服務,其中存儲和保存諸如數(shù)據(jù),對象,人或事件的各種實體以便稍后處理。在這些上下文中,隊列執(zhí)行緩沖區(qū)的功能。隊列在計算機程序中很常見,它們被實現(xiàn)為與訪問例程耦合的數(shù)據(jù)結(jié)構(gòu),作為抽象數(shù)據(jù)結(jié)構(gòu)或作為類的面向?qū)ο笳Z言。常見的實現(xiàn)是循環(huán)緩沖區(qū)和鏈表。

  • 生活中典型的實例就是排隊,先到的人排在前面,可先得到服務,后到的人排在后面,并且不能插隊。
  • 計算機應用中典型的實例就是打印機,先發(fā)送的打印任務可以先被執(zhí)行,之后的都要排隊等候

二、Python實現(xiàn)

1、在 Python 中,和棧一樣,同樣可以用列表作為隊列的底層實現(xiàn),只需要確定列表的哪一端作為隊列的頭,也即刪除操作端(先進先出),哪一端作為隊列的尾,也即插入操作端(后進后出)。同時,把隊列抽象為類,隊列的先進先出操作實現(xiàn)為類的方法。

2、從理論上講,隊列的一個特征是它沒有特定的容量。無論已包含多少元素,始終可以添加新元素。它也可以是空的,此時在再次添加新元素之前刪除元素是不可能的。

3、隊列的Python實現(xiàn):

Queue.qsize() 返回隊列的大小

Queue.empty() 如果隊列為空,返回True,反之False

Queue.full() 如果隊列滿了,返回True,反之False,Queue.full 與 maxsize 大小對應

Queue.get()從隊列中移除并返回數(shù)據(jù)

Queue.get_nowait() 相當于Queue.get(False),非阻塞方法

Queue.put(item[, block[, timeout]])
將item放入隊列

  • timeout為正整數(shù)時,等待超時則拋出Full異常

  • block為False時,有空間可將數(shù)據(jù)放入隊列,立即拋出Full異常

Queue.task_done() 在完成一項工作之后,Queue.task_done()函數(shù)向任務已經(jīng)完成的隊列發(fā)送一個信號。每個get()調(diào)用得到一個任務,接下來task_done()調(diào)用告訴隊列該任務已經(jīng)處理完畢。

Queue.join() 實際上意味著等到隊列為空,再執(zhí)行別的操作【線程阻塞,直到隊列中的所有任務處理完畢】

from Queue import Queue,LifoQueue,PriorityQueue
#先進先出隊列
q=Queue(maxsize=5)
#后進先出隊列
lq=LifoQueue(maxsize=6)
#優(yōu)先級隊列
pq=PriorityQueue(maxsize=5)
 
for i in range(5):
    q.put(i)
    lq.put(i)
    pq.put(i)
    
print "先進先出隊列:%s;是否為空:%s;多大,%s;是否滿,%s" %(q.queue,q.empty(),q.qsize(),q.full())
print "后進先出隊列:%s;是否為空:%s;多大,%s;是否滿,%s" %(lq.queue,lq.empty(),lq.qsize(),lq.full())
print "優(yōu)先級隊列:%s;是否為空:%s,多大,%s;是否滿,%s" %(pq.queue,pq.empty(),pq.qsize(),pq.full())
 
print q.get(),lq.get(),pq.get()
 
print "先進先出隊列:%s;是否為空:%s;多大,%s;是否滿,%s" %(q.queue,q.empty(),q.qsize(),q.full())
print "后進先出隊列:%s;是否為空:%s;多大,%s;是否滿,%s" %(lq.queue,lq.empty(),lq.qsize(),lq.full())
print "優(yōu)先級隊列:%s;是否為空:%s,多大,%s;是否滿,%s" %(pq.queue,pq.empty(),pq.qsize(),pq.full())

4、python的四種隊列操作

①LILO: 先進先出,只能在尾部插入元素,只能從頭部取出元素

from queue import Queue
q = Queue()    # 創(chuàng)建隊列對象
q.put(1)       # 隊列尾部插入元素
q.put(2)
q.put(3)
print(q.queue) # 查看隊列中的所有元素
a = q.get()    # 返回并刪除隊列頭部元素
print(a)
print(q.queue) # 運行結(jié)果deque([2,3])

②LIFO:先進后出,類似棧

from queue import LifoQueue
lifoQueue = LifoQueue()  # 創(chuàng)建對象
lifoQueue.put(1)
lifoQueue.put(2)
lifoQueue.put(3)
print(lifoQueue.queue)
lifoQueue.get()          # 返回并刪除隊列尾部元素
print(lifoQueue.queue)   # 運行結(jié)果[1,2]

③優(yōu)先隊列:隊列元素為元組類型,即(優(yōu)先級,數(shù)據(jù))。

from queue import PrioritQueue as pq
pq = pq()        # 創(chuàng)建有限隊列
pq.put(1)
pq.put(4)
pq.put(3)  
print(pq.queue)  # 運行結(jié)果[1,3,4]
pq.get()         # 返回并刪除優(yōu)先級最低的元素
print(pq.queue)  # 運行結(jié)果[3,4]

④雙端隊列

>>> from collections import deque   #雙端隊列
>>> dequeQueue = deque(['Eric','John','Smith'])
>>> print(dequeQueue)
deque(['Eric', 'John', 'Smith'])
>>> dequeQueue.append('Tom')    #在右側(cè)插入新元素
>>> dequeQueue.appendleft('Terry')  #在左側(cè)插入新元素
>>> print(dequeQueue)
deque(['Terry', 'Eric', 'John', 'Smith', 'Tom'])
>>> dequeQueue.rotate(2)    #循環(huán)右移2次
>>> print('循環(huán)右移2次后的隊列',dequeQueue)
循環(huán)右移2次后的隊列 deque(['Smith', 'Tom', 'Terry', 'Eric', 'John'])
>>> dequeQueue.popleft()    #返回并刪除隊列最左端元素
'Smith'
>>> print('刪除最左端元素后的隊列:',dequeQueue)
刪除最左端元素后的隊列: deque(['Tom', 'Terry', 'Eric', 'John'])
>>> dequeQueue.pop()    #返回并刪除隊列最右端元素
'John'
>>> print('刪除最右端元素后的隊列:',dequeQueue)
刪除最右端元素后的隊列: deque(['Tom', 'Terry', 'Eric'])

堆、棧、隊列之間的區(qū)別

1、堆是在程序運行時,而不是在程序編譯時,申請某個大小的內(nèi)存空間。即動態(tài)分配內(nèi)存,對其訪問和對一般內(nèi)存的訪問沒有區(qū)別。

2、棧就是一個桶,后放進去的先拿出來,它下面本來有的東西要等它出來之后才能出來。(后進先出)

3、隊列只能在隊頭做刪除操作,在隊尾做插入操作.而棧只能在棧頂做插入和刪除操作。(先進先出)

到此這篇關(guān)于Python中堆、棧、隊列之間的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)Python 堆 棧 隊列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux中Python 環(huán)境軟件包安裝步驟

    Linux中Python 環(huán)境軟件包安裝步驟

    本文給大家分享的是在Linux系統(tǒng)中Python環(huán)境的安裝步驟,以及常用的軟件的安裝升級,非常的實用,有需要的小伙伴可以參考下
    2016-03-03
  • OpenCV特征提取與檢測之Harris角點檢測

    OpenCV特征提取與檢測之Harris角點檢測

    這篇文章主要給大家介紹了關(guān)于OpenCV特征提取與檢測之Harris角點檢測的相關(guān)資料,Harris角點檢測的目的是去分辨出圖像中的平面、邊界以及角點,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • Python找出list中最常出現(xiàn)元素的方法

    Python找出list中最常出現(xiàn)元素的方法

    這篇文章主要介紹了Python找出list中最常出現(xiàn)元素的方法,給出了三種常用的方法供大家對比參考,需要的朋友可以參考下
    2016-06-06
  • Python實現(xiàn)的登錄驗證系統(tǒng)完整案例【基于搭建的MVC框架】

    Python實現(xiàn)的登錄驗證系統(tǒng)完整案例【基于搭建的MVC框架】

    這篇文章主要介紹了Python實現(xiàn)的登錄驗證系統(tǒng),結(jié)合完整實例形式分析了Python基于搭建的MVC框架進行登錄驗證操作的相關(guān)實現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-04-04
  • 基于Python的socket庫實現(xiàn)通信功能的示例代碼

    基于Python的socket庫實現(xiàn)通信功能的示例代碼

    本文主要給大家介紹了如何使用python的socket庫實現(xiàn)通信功能,這里簡單的給每個客戶端增加一個不重復的uid,客戶端之間可以根據(jù)這個uid選擇進行廣播通信,感興趣的小伙伴快來看看吧
    2023-08-08
  • Python經(jīng)驗總結(jié):兩種Type?Error問題

    Python經(jīng)驗總結(jié):兩種Type?Error問題

    這篇文章主要介紹了Python經(jīng)驗總結(jié):兩種Type?Error問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python 字典 setdefault()和get()方法比較詳解

    python 字典 setdefault()和get()方法比較詳解

    這篇文章主要介紹了python 字典 setdefault()和get()方法比較詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python日志處理模塊logging用法解析

    Python日志處理模塊logging用法解析

    這篇文章主要介紹了Python日志處理模塊logging用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 基于pygame實現(xiàn)童年掌機打磚塊游戲

    基于pygame實現(xiàn)童年掌機打磚塊游戲

    這篇文章主要為大家詳細介紹了基于pygame實現(xiàn)童年掌機打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • VSCode配合pipenv搞定虛擬環(huán)境的實現(xiàn)方法

    VSCode配合pipenv搞定虛擬環(huán)境的實現(xiàn)方法

    這篇文章主要介紹了VSCode配合pipenv搞定虛擬環(huán)境的實現(xiàn)方法,文中通過圖文教程介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05

最新評論

安远县| 钟山县| 巴彦淖尔市| 渝中区| 静乐县| 石景山区| 廉江市| 乌鲁木齐县| 延寿县| 额济纳旗| 门头沟区| 昆明市| 顺昌县| 武安市| 遂溪县| 武川县| 遂溪县| 客服| 临桂县| 马公市| 定远县| 罗定市| 辽中县| 利辛县| 陆川县| 山阴县| 托克托县| 惠安县| 双峰县| 江油市| 隆林| 宁城县| 郑州市| 宕昌县| 咸阳市| 合水县| 海阳市| 富民县| 长宁县| 佛教| 威宁|