RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)現(xiàn)一個(gè)雙端隊(duì)列的步驟簡析

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:小K算法 ? 作者:小K算法 ? 2022-10-27 18:11 ? 次閱讀

01 故事起源

隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。
a891d4e6-3e14-11ed-9e49-dac502259ad0.jpg ?

一般通過數(shù)組實(shí)現(xiàn)。

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

還需要定義2個(gè)指針,頭指針和尾指針。

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

02 插入和刪除

2.1 插入

從隊(duì)尾tail處插入,再將tail指針后移。

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

2.2 刪除

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

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

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

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

03 循環(huán)隊(duì)列

循環(huán)其實(shí)就是讓head,tail兩個(gè)指針在數(shù)組內(nèi)循環(huán)移動(dòng),當(dāng)移動(dòng)到隊(duì)尾時(shí)就跳到隊(duì)首。

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

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

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

當(dāng)head==tail時(shí),即為隊(duì)空。

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

當(dāng)head==(tail+1)%n時(shí),即為隊(duì)滿。如果隊(duì)列長度為n,則只能裝n-1個(gè)元素,最后一個(gè)元素要空著。因?yàn)槿绻湃朐?,tail會(huì)和head重合,就無法判斷是隊(duì)空還是隊(duì)滿。

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

04 雙端隊(duì)列

普通隊(duì)列只能隊(duì)首出,隊(duì)尾進(jìn),但有時(shí)我們需要隊(duì)首和隊(duì)尾都能進(jìn)出,即雙端隊(duì)列。

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

4.1 插入

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

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

4.2 刪除

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

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

05 代碼實(shí)現(xiàn)

實(shí)現(xiàn)一個(gè)模板,以后可重復(fù)利用。

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

pYYBAGNaWfKASN9WAADxGnPQSWY163.jpg

構(gòu)造函數(shù)


pYYBAGNaWgaAe_rcAAA7pt2b8w8036.jpg

插入

pYYBAGNaWhqAMxtzAACZlor3Pqg744.jpg

刪除

pYYBAGNaWjWAIjFIAACbiK6QEao611.jpg

size方法

poYBAGNaWkiAZQ7kAAA6IiPLzO0989.jpg

使用案例

poYBAGNaWmiAVn6gAADaowX09qA627.jpg


06 總結(jié)

隊(duì)列是非常基礎(chǔ)且重要的數(shù)據(jù)結(jié)構(gòu),雙端隊(duì)列屬于隊(duì)列的升級(jí)。很多的算法都是基于隊(duì)列來實(shí)現(xiàn),例如搜索中的bfs,圖論中的spfa,計(jì)算幾何中的melkman等。隊(duì)列結(jié)構(gòu)本身很簡單,如何使用才是比較難的,一定要深刻理解,以后才能熟練應(yīng)用到不同的模型中。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • BFS
    BFS
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    2169

原文標(biāo)題:如何實(shí)現(xiàn)一個(gè)雙端隊(duì)列?

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    新能源電池產(chǎn)業(yè)鏈及投資機(jī)會(huì)-磷酸亞鐵鋰

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

    【設(shè)計(jì)技巧】rtos的核心原理

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

    Rockchip RK3399 Linux4.4 USB DTS配置步驟

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

    PCB線路板電鍍銅工藝

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

    EPON技術(shù)

    EPON技術(shù) EPON是個(gè)新技術(shù),用于保證提供個(gè)高品質(zhì)與高帶寬利用率的應(yīng)用。   
    發(fā)表于 01-22 10:43 ?866次閱讀

    BGA封裝技術(shù)與質(zhì)量控制

    BGA封裝技術(shù)與質(zhì)量控制  ?。樱停裕⊿urface Mount Technology)表面安裝技術(shù)順應(yīng)了電子產(chǎn)品小型化、輕型化的潮流趨勢,為實(shí)現(xiàn)電子
    發(fā)表于 03-30 16:49 ?1486次閱讀

    鼠標(biāo)HID例程(中)

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

    用電阻設(shè)定增益的單至差分轉(zhuǎn)換器資料下載

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

    TencentOS-tiny中環(huán)形隊(duì)列實(shí)現(xiàn)

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

    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++提供的隊(duì)列封裝個(gè)消息隊(duì)列

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

    隊(duì)列和C++ std::deque的用法說明

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

    AFE8092幀同步特性

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

    個(gè)實(shí)現(xiàn)個(gè)隊(duì)列方法

    數(shù)據(jù)結(jié)構(gòu),同時(shí)也存在某種聯(lián)系。用??梢?b class='flag-5'>實(shí)現(xiàn)隊(duì)列,用隊(duì)列也可以實(shí)現(xiàn)棧。 兩個(gè)實(shí)現(xiàn)
    的頭像 發(fā)表于 10-08 15:54 ?801次閱讀

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

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