0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

實現一個雙端隊列的步驟簡析

算法與數據結構 ? 來源:小K算法 ? 作者:小K算法 ? 2022-10-27 18:11 ? 次閱讀

01 故事起源

隊列是一種先進先出的數據結構。
a891d4e6-3e14-11ed-9e49-dac502259ad0.jpg ?

一般通過數組實現。

a8bd1354-3e14-11ed-9e49-dac502259ad0.jpg ?

還需要定義2個指針,頭指針和尾指針。

a8f89a78-3e14-11ed-9e49-dac502259ad0.jpg ?

02 插入和刪除

2.1 插入

從隊尾tail處插入,再將tail指針后移。

a93c3d00-3e14-11ed-9e49-dac502259ad0.jpg

2.2 刪除

從隊首head處取出元素,再將head指針后移。

a969c1b2-3e14-11ed-9e49-dac502259ad0.jpg ?

但數組是定長的,如果多次插入刪除,tail指針就會超出數組范圍,而前面其實還是有空間的,所以常用的還是循環(huán)隊列。

a98706c8-3e14-11ed-9e49-dac502259ad0.jpg ?

03 循環(huán)隊列

循環(huán)其實就是讓head,tail兩個指針在數組內循環(huán)移動,當移動到隊尾時就跳到隊首。

a9c7016a-3e14-11ed-9e49-dac502259ad0.jpg ?

通過取模就可以實現循環(huán)。

a9d96dc8-3e14-11ed-9e49-dac502259ad0.jpg ?

當head==tail時,即為隊空。

aa0175de-3e14-11ed-9e49-dac502259ad0.jpg ?

當head==(tail+1)%n時,即為隊滿。如果隊列長度為n,則只能裝n-1個元素,最后一個元素要空著。因為如果放入元素,tail會和head重合,就無法判斷是隊空還是隊滿。

aa144b00-3e14-11ed-9e49-dac502259ad0.jpg ? ?

04 雙端隊列

普通隊列只能隊首出,隊尾進,但有時我們需要隊首和隊尾都能進出,即雙端隊列。

aa29a5d6-3e14-11ed-9e49-dac502259ad0.jpg

4.1 插入

隊首插入,則head指針前移;隊尾插入,則tail指針后移。

aa5445a2-3e14-11ed-9e49-dac502259ad0.jpg

4.2 刪除

隊首刪除,則head指針后移;隊尾刪除,則tail指針前移。

aa81d4b8-3e14-11ed-9e49-dac502259ad0.jpg ?

05 代碼實現

實現一個模板,以后可重復利用。

先定義必要的方法和變量。

pYYBAGNaWfKASN9WAADxGnPQSWY163.jpg

構造函數


pYYBAGNaWgaAe_rcAAA7pt2b8w8036.jpg

插入

pYYBAGNaWhqAMxtzAACZlor3Pqg744.jpg

刪除

pYYBAGNaWjWAIjFIAACbiK6QEao611.jpg

size方法

poYBAGNaWkiAZQ7kAAA6IiPLzO0989.jpg

使用案例

poYBAGNaWmiAVn6gAADaowX09qA627.jpg


06 總結

隊列是非?;A且重要的數據結構,雙端隊列屬于隊列的升級。很多的算法都是基于隊列來實現,例如搜索中的bfs,圖論中的spfa,計算幾何中的melkman等。隊列結構本身很簡單,如何使用才是比較難的,一定要深刻理解,以后才能熟練應用到不同的模型中。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • BFS
    BFS
    +關注

    關注

    0

    文章

    9

    瀏覽量

    2156

原文標題:如何實現一個雙端隊列?

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    新能源電池產業(yè)鏈及投資機會-磷酸亞鐵鋰

    新能源電池產業(yè)鏈及投資機會-磷酸亞鐵鋰  、前言
    發(fā)表于 12-25 09:34 ?975次閱讀

    【設計技巧】rtos的核心原理

    rtos的核心原理rtos全稱real-time operating system(實時操作系統(tǒng)),我來簡單分析下:我們都知道,c語句中調用函數后,該函數的返回地址都是放在堆棧
    發(fā)表于 07-23 08:00

    Rockchip RK3399 Linux4.4 USB DTS配置步驟

    1、Rockchip RK3399 Linux4.4 USB DTS配置步驟本文檔提供RK3399 USB DTS的配置方法。RK3399支持兩Type-C USB3.0(Typ
    發(fā)表于 08-10 16:10

    PCB線路板電鍍銅工藝

    PCB線路板電鍍銅工藝   .電鍍工藝的分類:   酸性光亮銅電鍍電鍍鎳/金電鍍錫   二.工藝流程:
    發(fā)表于 11-17 14:01 ?3995次閱讀

    EPON技術

    EPON技術 EPON是新技術,用于保證提供高品質與高帶寬利用率的應用。   
    發(fā)表于 01-22 10:43 ?851次閱讀

    BGA封裝技術與質量控制

    BGA封裝技術與質量控制  ?。樱停裕⊿urface Mount Technology)表面安裝技術順應了電子產品小型化、輕型化的潮流趨勢,為實現電子
    發(fā)表于 03-30 16:49 ?1460次閱讀

    鼠標HID例程(中)

    鼠標 HID 例程 緊接《鼠標 HID 例程(上)》文,繼續(xù)向大家介紹鼠 標 HID 例程的未完的內容。
    發(fā)表于 07-26 15:18 ?0次下載

    用電阻設定增益的單至差分轉換器資料下載

    電子發(fā)燒友網為你提供用電阻設定增益的單至差分轉換器資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-04 08:46 ?3次下載
    <b class='flag-5'>簡</b><b class='flag-5'>析</b>用電阻設定增益的單<b class='flag-5'>端</b>至差分轉換器資料下載

    TencentOS-tiny中環(huán)形隊列實現

    1. 什么是隊列隊列(queue)是種只能在一端插入元素、在另一端刪除元素的數據結構,遵循「先入先出」(FIFO)的規(guī)則。 隊列中有兩
    的頭像 發(fā)表于 10-08 16:30 ?1355次閱讀

    5G AAU 功放控制和監(jiān)測模塊

    5G AAU 功放控制和監(jiān)測模塊
    發(fā)表于 10-28 12:00 ?2次下載
    5G AAU 功放控制和監(jiān)測模塊<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    利用C++提供的隊列封裝消息隊列

    最近的C++項目中,需要用到消息隊列,但是C++中又沒有原生的消息隊列,就在網上找了下相關資料,利用C++提供的隊列,自己封裝
    的頭像 發(fā)表于 05-20 15:16 ?1755次閱讀
    利用C++提供的<b class='flag-5'>隊列</b>封裝<b class='flag-5'>一</b><b class='flag-5'>個</b>消息<b class='flag-5'>隊列</b>

    隊列和C++ std::deque的用法說明

    隊列實際上是隊列種變形,隊列要求只能在隊尾添加元素,在隊頭刪除元素,而
    的頭像 發(fā)表于 07-18 17:43 ?585次閱讀
    <b class='flag-5'>雙</b><b class='flag-5'>端</b><b class='flag-5'>隊列</b>和C++ std::deque的用法說明

    AFE8092幀同步特性

    AFE8092幀同步特性
    的頭像 發(fā)表于 08-24 13:37 ?615次閱讀
    AFE8092幀同步特性<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    實現隊列方法

    數據結構,同時也存在某種聯系。用棧可以實現隊列,用隊列也可以實現棧。 兩實現
    的頭像 發(fā)表于 10-08 15:54 ?770次閱讀

    巖土工程監(jiān)測中振弦采集儀的布設方案及實施步驟

    巖土工程監(jiān)測中振弦采集儀的布設方案及實施步驟 巖土工程監(jiān)測中,河北穩(wěn)控科技振弦采集儀是種常用的地下水位和土層壓縮性監(jiān)測工具。它通過采集振弦的振動信號來確定地下水位和土層的壓縮性,
    的頭像 發(fā)表于 05-06 13:25 ?220次閱讀
    巖土工程監(jiān)測中振弦采集儀的布設方案及實施<b class='flag-5'>步驟</b><b class='flag-5'>簡</b><b class='flag-5'>析</b>