精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

隊列實現棧原理是什么?隊列實現棧方案有哪幾種?

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

1、隊列實現棧原理簡述

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

2、隊列實現棧方案和實現

方案1:

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

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

一個棧輸出元素順序

pYYBAGDhSEyAdw4iAAASk34tfNs779.jpg

兩個隊列queue1和queue2模擬棧

poYBAGDhSFSAD2xuAABApH0Njto619.jpg

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

poYBAGDhSF6AElBAAAB5DbpRGCo582.jpg

棧初始化函數實現:

poYBAGDhSGuATGupAABDbwkUz54998.jpg

棧銷毀函數實現:

pYYBAGDhSHeACJ0jAAA5-j_6l6c146.jpg

入棧函數實現:

poYBAGDhSICAXrdRAAAxX-RjUj8740.jpg

出棧函數實現:

pYYBAGDhSIqASGSQAAB8F1Mp3es586.jpg

判斷棧是否空和是否滿函數實現:

poYBAGDhSJyAIFsaAABW1UkhDxU770.jpg

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

poYBAGDhSKaAeLi6AAA3CEypaKE570.jpg

單個隊列模擬出棧函數實現如下:

pYYBAGDhSLCAVo4rAABl3JgrwOM365.jpg

棧實現驗證

下面我們寫一個小程序驗棧實現的正確性。

poYBAGDhSLqAf1UWAADbnrJOENY998.jpg

編譯運行輸出如下:

pYYBAGDhSMSAJ1tIAAAysSP7yQc495.jpg

隊列模擬棧完全正確。

責任編輯:lq6

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

    關注

    23

    文章

    4601

    瀏覽量

    92677
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40095
  • 元素
    +關注

    關注

    0

    文章

    47

    瀏覽量

    8422

原文標題:數據結構與算法篇-隊列實現棧

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

收藏 人收藏

    評論

    相關推薦

    JavaWeb消息隊列使用指南

    在現代的JavaWeb應用中,消息隊列(Message Queue)是一種常見的技術,用于異步處理任務、解耦系統組件、提高系統性能和可靠性。 1. 消息隊列的基本概念 消息隊列是一種應用程序對應
    的頭像 發表于 11-25 09:27 ?94次閱讀

    Linux網絡協議實現

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

    嵌入式環形隊列與消息隊列實現原理

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

    TCP/IP協議的設計與實現_中文

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

    LwIP協議源碼詳解—TCP/IP協議的實現

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

    斷路器哪幾種

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

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

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

    變壓器的調壓方式哪幾種

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

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

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

    SPWM哪幾種調制方式?各有什么特點?

    SPWM哪幾種調制方式?各有什么特點? SPWM 是一種常用的調制技術,用于控制交流電壓的形狀和頻率,以便實現電力電子設備的精確控制。SPWM可以分為基本SPWM和改進SPWM兩種調制方式。下面將
    的頭像 發表于 02-06 09:45 ?2412次閱讀

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

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

    裸機中環形隊列與RTOS中消息隊列有何區別呢?

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

    labview隊列有什么實際作用

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

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

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

    無線通信技術哪幾種

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