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

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

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

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

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

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

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

2、隊(duì)列實(shí)現(xiàn)棧方案和實(shí)現(xiàn)

方案1:

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

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

一個棧輸出元素順序

pYYBAGDhSEyAdw4iAAASk34tfNs779.jpg

兩個隊(duì)列queue1和queue2模擬棧

poYBAGDhSFSAD2xuAABApH0Njto619.jpg

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

poYBAGDhSF6AElBAAAB5DbpRGCo582.jpg

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

poYBAGDhSGuATGupAABDbwkUz54998.jpg

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

pYYBAGDhSHeACJ0jAAA5-j_6l6c146.jpg

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

poYBAGDhSICAXrdRAAAxX-RjUj8740.jpg

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

pYYBAGDhSIqASGSQAAB8F1Mp3es586.jpg

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

poYBAGDhSJyAIFsaAABW1UkhDxU770.jpg

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

poYBAGDhSKaAeLi6AAA3CEypaKE570.jpg

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

pYYBAGDhSLCAVo4rAABl3JgrwOM365.jpg

棧實(shí)現(xiàn)驗(yàn)證

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

poYBAGDhSLqAf1UWAADbnrJOENY998.jpg

編譯運(yùn)行輸出如下:

pYYBAGDhSMSAJ1tIAAAysSP7yQc495.jpg

隊(duì)列模擬棧完全正確。

責(zé)任編輯:lq6

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

    關(guān)注

    23

    文章

    4575

    瀏覽量

    92335
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    569

    瀏覽量

    40063
  • 元素
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    8406

原文標(biāo)題:數(shù)據(jù)結(jié)構(gòu)與算法篇-隊(duì)列實(shí)現(xiàn)棧

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    斷路器哪幾種

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

    變壓器的調(diào)壓方式哪幾種?

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

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

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

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

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

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

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

    無線通信技術(shù)哪幾種?

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

    什么是步進(jìn)電機(jī)?步進(jìn)電機(jī)分哪幾種?

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

    電容器的補(bǔ)償方式哪幾種?

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

    基于FreeRTOS的STM32F103系統(tǒng)—隊(duì)列

    在FreeRTOS中,隊(duì)列實(shí)現(xiàn)任務(wù)之間同步、互斥和通信的一種重要方法(其他的實(shí)現(xiàn)方法:任務(wù)通知、事件組、信號量、互斥量)。
    的頭像 發(fā)表于 11-10 11:37 ?1053次閱讀
    基于FreeRTOS的STM32F103系統(tǒng)—<b class='flag-5'>隊(duì)列</b>

    如何實(shí)現(xiàn)一個多讀多寫的線程安全的無鎖隊(duì)列

    在ZMQ無鎖隊(duì)列的原理與實(shí)現(xiàn)一文中,我們已經(jīng)知道了ypipe可以實(shí)現(xiàn)一線程寫一線程讀的無鎖隊(duì)列,那么其劣勢就很明顯了,無法適應(yīng)多寫多讀的場景,因?yàn)槠湓谧x的時(shí)候沒有對r指針加鎖,在寫的時(shí)
    的頭像 發(fā)表于 11-08 15:25 ?1018次閱讀
    如何<b class='flag-5'>實(shí)現(xiàn)</b>一個多讀多寫的線程安全的無鎖<b class='flag-5'>隊(duì)列</b>

    消息隊(duì)列的發(fā)展歷史

    上一篇我們用一個秒殺案例探討了我們?yōu)槭裁葱枰?b class='flag-5'>隊(duì)列。今天我們來回顧一下消息隊(duì)列的發(fā)展歷史。
    的頭像 發(fā)表于 10-30 10:49 ?961次閱讀
    消息<b class='flag-5'>隊(duì)列</b>的發(fā)展歷史

    硅片哪幾種晶向?幾種定位邊?定位邊是如何定位的?

    硅片是大多數(shù)芯片的載體。但是一塊硅片中卻隱藏了很多不為人知的細(xì)節(jié),比如:硅片哪幾種晶向?幾種定位邊?定位邊是如何定位的?定位邊與定位槽
    的頭像 發(fā)表于 10-29 10:33 ?9692次閱讀
    硅片<b class='flag-5'>有</b><b class='flag-5'>哪幾種</b>晶向?<b class='flag-5'>有</b><b class='flag-5'>幾種</b>定位邊?定位邊是如何定位的?