1. 程式人生 > >結構與演算法(02):佇列和棧結構

結構與演算法(02):佇列和棧結構

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/model-arithmetic-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/model-arithmetic-parent) # 一、佇列結構 ## 1、基礎概念 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。 ## 2、特點描述 佇列是一個有序列表,可以用陣列或是連結串列來實現,遵循先進先出的原則。即:先進入佇列的資料,會先取出;後進入佇列的資料,要後取出;即FIFO原則。 **入佇列示意圖**: ![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200909090109925-1911859594.png) **出佇列示意圖**: ![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200909090121628-155047551.png) 通過上述兩張圖解,不難發現佇列結構的一些特點: - 先進入的資料先出去; - 資料從隊尾進入,從隊首出去; - 基於陣列描述佇列下標變更頻繁; - 出佇列演算法可以基於容器大小取模; 佇列結構的核心是對容器內是否空、是否滿標誌的判斷演算法,即容器為空不可再取,容器已滿無法再存;該演算法結構在倉儲領域的適應非常廣泛。 ## 3、訊息佇列 訊息佇列就是基於資料結構中的“先進先出”策略實現的,將訊息以排隊的方式放入佇列中,然後出佇列被消費: ![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200909090132790-2003440219.png) 有時候某類訊息消費需要有順序控制,即可以對訊息中的公共ID做取模處理,即把某類訊息都置於一個佇列中即可。 ## 4、API使用案例 LinkedList類實現Queue佇列介面,因此可以基於LinkedList模擬佇列效果。 ```java import java.util.LinkedList; import java.util.Queue; public class M01_Queue { public static void main(String[] args) { // 入佇列