【数据结构与算法】浅谈队列的应用
學習數據結構與算法的時候,我們學到的隊列Queue與FIFO緊密相關,First Input First Output,先進先出。
隊列是一種特殊的線性表,特點是兩端一端進一端出,與日常生活中不含插隊的排隊相似,所以名為隊列。
隊列與棧應該是非常工具性的數據結構了,棧一端進出,具有LIFO的特點,與FIFO迥異。
隊列的應用通常被闡釋為實際中的排隊活動,實際上它在計算機系統以及算法實現中用途廣泛。
FIFO隊列常常用作算法實現的輔助數據結構,特別是遞歸算法的非遞歸實現。
DFS的非遞歸實現需要借助棧,BFS的非遞歸實現需要借助隊列。
消息隊列MQ、輸入隊列、輸出隊列、就緒隊列、等待隊列……在計算機系統和大規模軟件系統中,我們經??梢钥吹疥犃械纳碛?。
隊列往往可以被這樣用于計算機系統中:
- 解決主機與外部設備之間速度不匹配的問題。
- 解決由多用戶引起的資源競爭問題。
實際的隊列未必是FIFO隊列。以操作系統進程狀態轉化中涉及到的就緒隊列而言,其實現可以是FIFO隊列、優先隊列、樹或簡單的無序鏈表等,不必是傳統意義上的FIFO隊列。
比如說模擬的網絡打印機的設計。其隊列固然可以用FIFO隊列,卻也可以用優先隊列等。
優先隊列與FIFO隊列關系不大,底層的經典實現是堆,其應用也是比較廣泛的,畢竟我們不可能一直只使用FIFO隊列。
編程語言往往對隊列提供了實現,優先隊列格外被重視。
比如Java的java.util.Queue接口,它可以使用LinkedList作為雙向鏈隊列的實現;又比如Java的java.util.PriorityQueue,直接提供了優先隊列的實現。
C++的STL中也提供了頭文件#include <queue>下的priority_queue實現。
學好棧和隊列,對于提升我們的算法實現能力,大有裨益。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【数据结构与算法】浅谈队列的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring 多数据源- 原理
- 下一篇: delphi与C内存分配函数之管见