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

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

3天內不再提示

隊列實現(xiàn)棧原理是什么?隊列實現(xiàn)棧方案有哪幾種?

Android編程精選 ? 來源:編程學習總站 ? 作者:寫代碼的牛頓 ? 2021-07-04 13:28 ? 次閱讀

1、隊列實現(xiàn)棧原理簡述

棧是一種后進先出的數(shù)據(jù)結構,而隊列是一種先進先出的數(shù)據(jù)結構,兩者原理不難理解,使用也簡單。但是我們不僅僅要掌握數(shù)據(jù)結構的基本原理,還要學會靈活運用,能否靈活運用是考察一個人對數(shù)據(jù)結構的理解程度,也是在面試的時候經(jīng)常會考到的知識點?,F(xiàn)在假設面試官要求你用隊列實現(xiàn)棧,你的解決方案是什么?通過棧的基本原理我們知道,只要每次進行stack_pop操作時將隊列里最后一個元素輸出就能模擬棧的輸出操作。

2、隊列實現(xiàn)棧方案和實現(xiàn)

方案1:

我們很容易想到一種解決方案,隊列queue1保存原始輸入數(shù)據(jù),隊列queue2作為臨時隊列緩存數(shù)據(jù),只要進行stack_pop操作時,先將queue1里除最后一個元素外全部出隊,且出隊的數(shù)據(jù)保存在一個臨時隊列queue2里,保存queue1最后的元素,最后再將queue2里的全部元素出隊,且出隊的元素重新放進queue1里,返回保存的queue1最后的元素。

我們作了下圖便于理解2個隊列模擬棧的過程。

一個棧輸出元素順序

pYYBAGDhSEyAdw4iAAASk34tfNs779.jpg

兩個隊列queue1和queue2模擬棧

poYBAGDhSFSAD2xuAABApH0Njto619.jpg

在數(shù)據(jù)結構與算法篇-隊列和數(shù)據(jù)結構與算法篇-棧文章里我們詳細介紹了隊列和棧的原理,并都用C實現(xiàn)了隊列和棧?,F(xiàn)在我們復用這兩篇文章里隊列的實現(xiàn)代碼,用于實現(xiàn)棧。定義棧相關數(shù)據(jù)結構和操作函數(shù)代碼如下:

poYBAGDhSF6AElBAAAB5DbpRGCo582.jpg

棧初始化函數(shù)實現(xiàn):

poYBAGDhSGuATGupAABDbwkUz54998.jpg

棧銷毀函數(shù)實現(xiàn):

pYYBAGDhSHeACJ0jAAA5-j_6l6c146.jpg

入棧函數(shù)實現(xiàn):

poYBAGDhSICAXrdRAAAxX-RjUj8740.jpg

出棧函數(shù)實現(xiàn):

pYYBAGDhSIqASGSQAAB8F1Mp3es586.jpg

判斷棧是否空和是否滿函數(shù)實現(xiàn):

poYBAGDhSJyAIFsaAABW1UkhDxU770.jpg

從方案1我們知道每次出隊都需要將隊列里除最后一個元素外的元素保存在另外一個臨時隊列里,增加了空間復雜度。那么能否只用一個隊列能否模擬棧呢?通過仔細觀察方案1發(fā)現(xiàn)queue1出對的數(shù)據(jù)是可以重新再入隊的,只要讓隊列里最后一個元素在隊列頭即可,那么我們很容易想到方案2。 方案2: 將隊列queue1里的數(shù)據(jù)依次出隊,且出隊的數(shù)據(jù)重新放在queue1的隊尾,直到最后一個元素在隊列頭,最后輸出隊列頭的元素即可。整個過程我們可以用下圖表示。單個隊列模擬棧

poYBAGDhSKaAeLi6AAA3CEypaKE570.jpg

單個隊列模擬出棧函數(shù)實現(xiàn)如下:

pYYBAGDhSLCAVo4rAABl3JgrwOM365.jpg

棧實現(xiàn)驗證

下面我們寫一個小程序驗棧實現(xiàn)的正確性。

poYBAGDhSLqAf1UWAADbnrJOENY998.jpg

編譯運行輸出如下:

pYYBAGDhSMSAJ1tIAAAysSP7yQc495.jpg

隊列模擬棧完全正確。

責任編輯:lq6

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

    關注

    23

    文章

    4588

    瀏覽量

    92505
  • 數(shù)據(jù)結構

    關注

    3

    文章

    569

    瀏覽量

    40072
  • 元素
    +關注

    關注

    0

    文章

    47

    瀏覽量

    8410

原文標題:數(shù)據(jù)結構與算法篇-隊列實現(xiàn)棧

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux網(wǎng)絡協(xié)議實現(xiàn)

    網(wǎng)絡協(xié)議是操作系統(tǒng)核心的一個重要組成部分,負責管理網(wǎng)絡通信中的數(shù)據(jù)包處理。在 Linux 操作系統(tǒng)中,網(wǎng)絡協(xié)議(Network Stack)負責實現(xiàn) TCP/IP 協(xié)議簇,處理應用程序發(fā)起的網(wǎng)絡
    的頭像 發(fā)表于 09-10 09:51 ?237次閱讀
    Linux網(wǎng)絡協(xié)議<b class='flag-5'>棧</b>的<b class='flag-5'>實現(xiàn)</b>

    嵌入式環(huán)形隊列與消息隊列實現(xiàn)原理

    嵌入式環(huán)形隊列,也稱為環(huán)形緩沖區(qū)或循環(huán)隊列,是一種先進先出(FIFO)的數(shù)據(jù)結構,用于在固定大小的存儲區(qū)域中高效地存儲和訪問數(shù)據(jù)。其主要特點包括固定大小的數(shù)組和兩個指針(頭指針和尾指針),分別指向隊列的起始位置和結束位置。
    的頭像 發(fā)表于 09-02 15:29 ?293次閱讀

    TCP/IP協(xié)議的設計與實現(xiàn)_中文

    電子發(fā)燒友網(wǎng)站提供《TCP/IP協(xié)議的設計與實現(xiàn)_中文.pdf》資料免費下載
    發(fā)表于 07-03 11:28 ?4次下載

    LwIP協(xié)議源碼詳解—TCP/IP協(xié)議的實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《LwIP協(xié)議源碼詳解—TCP/IP協(xié)議的實現(xiàn).pdf》資料免費下載
    發(fā)表于 07-03 11:22 ?3次下載

    斷路器哪幾種

    斷路器哪幾種? 斷路器是一種用于保護電氣線路和設備的重要元件,它可以在電路發(fā)生短路或過載時自動切斷電源,以避免設備損壞和火災等危險。斷路器的種類繁多,根據(jù)不同的分類標準,可以分為以下幾種: 1.
    的頭像 發(fā)表于 06-10 16:19 ?2045次閱讀

    MCU專屬隊列功能模塊之QueueForMcu應用

    當需要從隊列頭部獲取多個數(shù)據(jù),但又不希望數(shù)據(jù)從隊列中刪除時,可以使用 Queue_Peek_Array 函數(shù)來實現(xiàn),該函數(shù)的參數(shù)與返回值與 Queue_Pop_Array 完全相同。
    發(fā)表于 03-20 11:44 ?404次閱讀
    MCU專屬<b class='flag-5'>隊列</b>功能模塊之QueueForMcu應用

    變壓器的調壓方式哪幾種

    常見的大功率級別的調壓方式哪些? 變壓器調壓又分為哪幾種形式? 調壓入合調壓出合調壓入分調壓出分這幾個概念分別是什么意思?
    發(fā)表于 02-21 15:11

    熔斷器幾種形式 熔斷器的滅弧方法哪幾種

    熔斷器幾種形式 熔斷器的滅弧方法哪幾種? 熔斷器是一種用來保護電路免受過電流和過負荷的損壞的電器設備。它們在電力系統(tǒng)和電子設備中廣泛應用,也被稱為電氣保險絲。熔斷器
    的頭像 發(fā)表于 02-06 10:08 ?2070次閱讀

    什么是串行端口?哪幾種分類?

    什么是串行端口?哪幾種分類? 串行端口是計算機中用于進行數(shù)據(jù)傳輸?shù)囊环N接口類型,通過單一的數(shù)據(jù)線逐位地傳輸數(shù)據(jù)。與串行端口相對應的是并行端口,與串行端口不同,它使用多條數(shù)據(jù)線同時傳輸數(shù)據(jù)。 串行
    的頭像 發(fā)表于 02-02 15:40 ?1880次閱讀

    裸機中環(huán)形隊列與RTOS中消息隊列有何區(qū)別呢?

    “環(huán)形隊列”和“消息隊列”在嵌入式領域應用非常廣泛,相信經(jīng)驗的嵌入式軟件工程師對它們都不陌生。
    的頭像 發(fā)表于 01-26 09:38 ?668次閱讀
    裸機中環(huán)形<b class='flag-5'>隊列</b>與RTOS中消息<b class='flag-5'>隊列</b>有何區(qū)別呢?

    labview隊列有什么實際作用

    LabVIEW隊列是一種數(shù)據(jù)結構,常用于解決多任務并發(fā)處理的問題。它被廣泛應用于科學研究、工程項目和自動化控制等領域。在LabVIEW中,隊列提供了一種高效、方便的方式來處理不同任務之間的數(shù)據(jù)
    的頭像 發(fā)表于 01-05 16:42 ?1447次閱讀

    HMDS與BARC一定要除去嗎?哪幾種去除的方式?

    HMDS,BARC是光刻工序中比較常用的化學品,但是它們并不能用顯影液除去,根據(jù)是什么?它們一定要除去嗎?哪幾種去除的方式?
    的頭像 發(fā)表于 12-22 10:29 ?2074次閱讀
    HMDS與BARC一定要除去嗎?<b class='flag-5'>有</b><b class='flag-5'>哪幾種</b>去除的方式?

    無線通信技術哪幾種?

    無線通信技術哪幾種? 無線通信技術指的是在無線電波傳播的信道上實現(xiàn)通信的技術。隨著科技的發(fā)展,無線通信技術得到了廣泛應用,并不斷創(chuàng)新和發(fā)展。 第一部分:無線通信技術概述 1.1 無線通信技術的定義
    的頭像 發(fā)表于 12-07 10:46 ?3805次閱讀

    什么是步進電機?步進電機分哪幾種?

    電子發(fā)燒友網(wǎng)站提供《什么是步進電機?步進電機分哪幾種?.pdf》資料免費下載
    發(fā)表于 11-28 14:21 ?1次下載
    什么是步進電機?步進電機分<b class='flag-5'>哪幾種</b>?

    電容器的補償方式哪幾種

    電容器在電子領域中使用十分普遍,而在它的使用過程中,為了保證電路可靠性和性能穩(wěn)定,電容器的補償就變得尤為重要。那么,電容器的補償方式哪幾種呢?
    的頭像 發(fā)表于 11-16 15:12 ?3700次閱讀