色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    4607

    瀏覽量

    92828
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40123
  • 元素
    +關注

    關注

    0

    文章

    47

    瀏覽量

    8429

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

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

收藏 人收藏

    評論

    相關推薦

    JavaWeb消息隊列使用指南

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

    Linux網絡協議實現

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

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

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

    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 ?2269次閱讀

    基于MM32G5330的FlexCAN實現CANopenNode協議移植

    本文將介紹如何基于靈動MM32G5330的FlexCAN實現CANopenNode協議的移植,并使用靈動官方提供的開發板Mini-G5333進行驗證。
    發表于 04-12 09:15 ?1464次閱讀
    基于MM32G5330的FlexCAN<b class='flag-5'>實現</b>CANopenNode協議<b class='flag-5'>棧</b>移植

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

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

    變壓器的調壓方式哪幾種

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

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

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

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

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

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

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

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

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

    labview 隊列最前端插入的應用

    LabVIEW是一種用于實時測試、測量和控制系統的高級系統設計軟件。它采用了數據流編程方式,提供了一種直觀、可視化的方法來構建復雜的測試和測量應用程序。其中一個重要的功能是隊列,它可以在軟件設計中
    的頭像 發表于 01-08 11:45 ?1184次閱讀

    labview隊列有什么實際作用

    LabVIEW隊列是一種數據結構,常用于解決多任務并發處理的問題。它被廣泛應用于科學研究、工程項目和自動化控制等領域。在LabVIEW中,隊列提供了一種高效、方便的方式來處理不同任務之間的數據
    的頭像 發表于 01-05 16:42 ?1581次閱讀
    主站蜘蛛池模板: 91久久精品国产亚洲| 精品国产九九| 秋秋影视午夜福利高清| 最新无码国产在线视频9299| 教室里的激情电影| 亚洲AV久久无码精品九号| 调教日本美女| 日韩av片无码一区二区不卡电影 | 交换:年轻夫妇-HD中文字幕| 无码天堂亚洲国产AV久久| 丰满少妇69激情啪啪无码| 青青草在线视频| 菠萝视频高清版在线观看| 欧美双拳极限扩张| 99视频这里只有精品国产| 免费光看午夜请高视频| ae58老司机福利| 欧美日韩国产高清综合二区| xxnxx动漫| 色情www日本欧美| 国产蜜臀AV在线一区视频| 亚洲va久久久久| 久久精品黄AA片一区二区三区| 印度性hd18| 女人一级毛片免费观看| s8sp视频高清在线播放| 色妺妺免费影院| 国产一在线精品一区在线观看| 一本大道手机在线看| 毛片免费在线播放| 成人国产在线看不卡| 无止侵犯高H1V3无止侵犯| 精品九九视频| 99久久精品久久久| 污漫日本E同人| 久久精品一区二区影院| xxxxhd17欧美老师| 爽爽影院免费观看| 久久免费国产| 成人AV精品视频| 夜夜穞狠狠穞|