RM新时代网站-首页

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

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

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

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

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

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

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

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里除最后一個(gè)元素外全部出隊(duì),且出隊(duì)的數(shù)據(jù)保存在一個(gè)臨時(shí)隊(duì)列queue2里,保存queue1最后的元素,最后再將queue2里的全部元素出隊(duì),且出隊(duì)的元素重新放進(jìn)queue1里,返回保存的queue1最后的元素。

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

一個(gè)棧輸出元素順序

pYYBAGDhSEyAdw4iAAASk34tfNs779.jpg

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

poYBAGDhSFSAD2xuAABApH0Njto619.jpg

在數(shù)據(jù)結(jié)構(gòu)與算法篇-隊(duì)列和數(shù)據(jù)結(jié)構(gòu)與算法篇-棧文章里我們?cè)敿?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ì)列里除最后一個(gè)元素外的元素保存在另外一個(gè)臨時(shí)隊(duì)列里,增加了空間復(fù)雜度。那么能否只用一個(gè)隊(duì)列能否模擬棧呢?通過(guò)仔細(xì)觀察方案1發(fā)現(xiàn)queue1出對(duì)的數(shù)據(jù)是可以重新再入隊(duì)的,只要讓隊(duì)列里最后一個(gè)元素在隊(duì)列頭即可,那么我們很容易想到方案2。 方案2: 將隊(duì)列queue1里的數(shù)據(jù)依次出隊(duì),且出隊(duì)的數(shù)據(jù)重新放在queue1的隊(duì)尾,直到最后一個(gè)元素在隊(duì)列頭,最后輸出隊(duì)列頭的元素即可。整個(gè)過(guò)程我們可以用下圖表示。單個(gè)隊(duì)列模擬棧

poYBAGDhSKaAeLi6AAA3CEypaKE570.jpg

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

pYYBAGDhSLCAVo4rAABl3JgrwOM365.jpg

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

下面我們寫一個(gè)小程序驗(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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4607

    瀏覽量

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

    關(guān)注

    3

    文章

    573

    瀏覽量

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

    關(guān)注

    0

    文章

    47

    瀏覽量

    8428

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    JavaWeb消息隊(duì)列使用指南

    在現(xiàn)代的JavaWeb應(yīng)用中,消息隊(duì)列(Message Queue)是一種常見(jiàn)的技術(shù),用于異步處理任務(wù)、解耦系統(tǒng)組件、提高系統(tǒng)性能和可靠性。 1. 消息隊(duì)列的基本概念 消息隊(duì)列是一種應(yīng)用程序?qū)?yīng)
    的頭像 發(fā)表于 11-25 09:27 ?139次閱讀

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

    網(wǎng)絡(luò)協(xié)議是操作系統(tǒng)核心的一個(gè)重要組成部分,負(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 ?298次閱讀
    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),用于在固定大小的存儲(chǔ)區(qū)域中高效地存儲(chǔ)和訪問(wèn)數(shù)據(jù)。其主要特點(diǎn)包括固定大小的數(shù)組和兩個(gè)指針(頭指針和尾指針),分別指向隊(duì)列的起始位置和結(jié)束位置。
    的頭像 發(fā)表于 09-02 15:29 ?475次閱讀

    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 ?4次下載

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

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

    斷路器哪幾種

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

    基于MM32G5330的FlexCAN實(shí)現(xiàn)CANopenNode協(xié)議移植

    本文將介紹如何基于靈動(dòng)MM32G5330的FlexCAN實(shí)現(xiàn)CANopenNode協(xié)議的移植,并使用靈動(dòng)官方提供的開(kāi)發(fā)板Mini-G5333進(jìn)行驗(yàn)證。
    發(fā)表于 04-12 09:15 ?1463次閱讀
    基于MM32G5330的FlexCAN<b class='flag-5'>實(shí)現(xiàn)</b>CANopenNode協(xié)議<b class='flag-5'>棧</b>移植

    MCU專屬隊(duì)列功能模塊之QueueForMcu應(yīng)用

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

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

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

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

    熔斷器幾種形式 熔斷器的滅弧方法哪幾種? 熔斷器是一種用來(lái)保護(hù)電路免受過(guò)電流和過(guò)負(fù)荷的損壞的電器設(shè)備。它們?cè)陔娏ο到y(tǒng)和電子設(shè)備中廣泛應(yīng)用,也被稱為電氣保險(xiǎn)絲。熔斷器
    的頭像 發(fā)表于 02-06 10:08 ?2382次閱讀

    SPWM哪幾種調(diào)制方式?各有什么特點(diǎn)?

    SPWM哪幾種調(diào)制方式?各有什么特點(diǎn)? SPWM 是一種常用的調(diào)制技術(shù),用于控制交流電壓的形狀和頻率,以便實(shí)現(xiàn)電力電子設(shè)備的精確控制。SPWM可以分為基本SPWM和改進(jìn)SPWM兩種調(diào)制方式。下面將
    的頭像 發(fā)表于 02-06 09:45 ?2662次閱讀

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

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

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

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

    labview 隊(duì)列最前端插入的應(yīng)用

    LabVIEW是一種用于實(shí)時(shí)測(cè)試、測(cè)量和控制系統(tǒng)的高級(jí)系統(tǒng)設(shè)計(jì)軟件。它采用了數(shù)據(jù)流編程方式,提供了一種直觀、可視化的方法來(lái)構(gòu)建復(fù)雜的測(cè)試和測(cè)量應(yīng)用程序。其中一個(gè)重要的功能是隊(duì)列,它可以在軟件設(shè)計(jì)中
    的頭像 發(fā)表于 01-08 11:45 ?1182次閱讀

    labview隊(duì)列有什么實(shí)際作用

    LabVIEW隊(duì)列是一種數(shù)據(jù)結(jié)構(gòu),常用于解決多任務(wù)并發(fā)處理的問(wèn)題。它被廣泛應(yīng)用于科學(xué)研究、工程項(xiàng)目和自動(dòng)化控制等領(lǐng)域。在LabVIEW中,隊(duì)列提供了一種高效、方便的方式來(lái)處理不同任務(wù)之間的數(shù)據(jù)
    的頭像 發(fā)表于 01-05 16:42 ?1581次閱讀
    RM新时代网站-首页