0 { s.queue2 = append (s.queue2, s.queue1[ 0 ]) s.queue1 = s.queue1[ 1 :] } s.queue1, s.queue2 = s.queue2, s.queue1} func (s *MyStack) Pop () int { v := s.queue1[ 0 ] s.queue1 = s.queue1[ 1 :] return v} func (s *MyStack) Top () int { return s.queue1[ 0 ]} func (s *MyStack) Empty () bool { re" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

用隊(duì)列實(shí)現(xiàn)棧的兩種方法

麥辣雞腿堡 ? 來(lái)源:盼盼編程 ? 作者:晨夢(mèng)思雨 ? 2023-10-08 16:01 ? 次閱讀

兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧

思路:兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧,使用了隊(duì)列交換的思想。

代碼如下:

type MyStack struct {
    queue1, queue2 []int
}

//構(gòu)造函數(shù)
func Constructor() (s MyStack) {
    return
}

func (s *MyStack) Push(x int) {
    s.queue2 = append(s.queue2, x)
    for len(s.queue1) > 0 {
        s.queue2 = append(s.queue2, s.queue1[0])
        s.queue1 = s.queue1[1:]
    }
    s.queue1, s.queue2 = s.queue2, s.queue1
}

func (s *MyStack) Pop() int {
    v := s.queue1[0]
    s.queue1 = s.queue1[1:]
    return v
}

func (s *MyStack) Top() int {
    return s.queue1[0]
}

func (s *MyStack) Empty() bool {
    return len(s.queue1) == 0
}

先將元素入對(duì)到 queue2,此時(shí) queue1 為0,交換 queue2 和 queue1。此時(shí) queue2 為0,queue1 中有1個(gè)元素。

再執(zhí)行push操作時(shí),len(queue1) > 0,此時(shí)再把 queue1 中的元素插入queue2 的尾部,然后將 queue2 和 queue1 進(jìn)行交換。

此時(shí)相當(dāng)于,插入 queue2 的兩個(gè)元素的位置發(fā)生了交換并保存在 queue1中。最后將 queue1 中的元素出隊(duì),這樣就可以保證后插入的元素先出。

不斷執(zhí)行 push 操作就行。

一個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧

思路:使用一個(gè)隊(duì)列時(shí),將當(dāng)前插入元素前面的所有元素,先出隊(duì)再入隊(duì)即可。

代碼如下:

type MyStack struct {
    queue []int
}

func Constructor() (s MyStack) {
    return
}

func (s *MyStack) Push(x int) {
    n := len(s.queue)
    s.queue = append(s.queue, x)
    for ; n > 0; n-- {
        s.queue = append(s.queue, s.queue[0])
        s.queue = s.queue[1:]
    }
}

func (s *MyStack) Pop() int {
    v := s.queue[0]
    s.queue = s.queue[1:]
    return v
}

func (s *MyStack) Top() int {
    return s.queue[0]
}

func (s *MyStack) Empty() bool {
    return len(s.queue) == 0
}

每次執(zhí)行 push 操作,如果queue存在元素,則將新插入元素前的所有元素出隊(duì),然后依次進(jìn)隊(duì)。這樣新插入的元素就在隊(duì)首了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux端口的開(kāi)啟的兩種方法需要掌握

    Linux端口的開(kāi)啟的兩種方法需要掌握
    發(fā)表于 11-28 10:05 ?1160次閱讀

    兩種方法解決電路設(shè)計(jì)問(wèn)題

    將200V的電壓施加到500歐姆的抽頭電阻器。找到連接到25V時(shí)需要0.1A電路的個(gè)分接點(diǎn)之間的電阻。我兩種方法解決了這個(gè)問(wèn)題。但正確的答案只能通過(guò)一種方法來(lái)
    發(fā)表于 09-14 13:54

    STM32操作矩陣鍵盤(pán)的兩種方法

    目錄STM32操作矩陣鍵盤(pán)的兩種方法——掃描和中斷一、矩陣鍵盤(pán)的結(jié)構(gòu)和原理二、掃描式矩陣鍵盤(pán)的原理和實(shí)現(xiàn)三、中斷式矩陣鍵盤(pán)的原理和實(shí)現(xiàn)四、兩種方案優(yōu)劣STM32操作矩陣鍵盤(pán)的
    發(fā)表于 08-12 06:33

    隊(duì)列

    隊(duì)列:1、隊(duì)列定義:限定僅只能在表尾端進(jìn)行插入和刪除的線性表。頂:表尾端被稱之為頂。
    發(fā)表于 08-13 13:50 ?0次下載

    創(chuàng)建主/從SPI接口的兩種方法詳談

    的文章,在此分享。 當(dāng)我們?cè)谠O(shè)計(jì)中使用Zynq SoC或Zynq UltraScale + MPSoC時(shí),可以有兩種方法來(lái)實(shí)現(xiàn)SPI接口: 1. 使用PS端的SPI控制器(PS端有個(gè)SPI控制器
    發(fā)表于 12-30 05:03 ?6192次閱讀
    創(chuàng)建主/從SPI接口的<b class='flag-5'>兩種方法</b>詳談

    使用jdbc連接上oracle的兩種方法

    本文主要介紹了使用jdbc連接上oracle的兩種方法:1、 使用thin連接,2、 使用oci連接(Oracle Call Interface)
    發(fā)表于 02-06 10:43 ?1682次閱讀

    你還會(huì)手寫(xiě)隊(duì)列隊(duì)列的基本實(shí)現(xiàn)程序說(shuō)明

    昨天跟一個(gè)CSDN上的朋友聊天,他說(shuō)現(xiàn)在如果讓他自己手寫(xiě)一個(gè)或者隊(duì)列,估計(jì)都要寫(xiě)蠻久的,平時(shí)雖然都在用,但是都是別人封裝好的集合。確實(shí),經(jīng)典的數(shù)據(jù)結(jié)構(gòu),包括排序算法,雖然我們平時(shí)不用手寫(xiě)了,但是
    的頭像 發(fā)表于 11-11 11:34 ?2759次閱讀

    單片機(jī)系統(tǒng)實(shí)現(xiàn)延時(shí)的兩種方法解析

    實(shí)現(xiàn)延時(shí)通常有兩種方法:一種是硬件延時(shí),要用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);另一種是軟件延時(shí),這種方法主要采用循環(huán)體進(jìn)行。
    發(fā)表于 01-24 17:06 ?1.4w次閱讀
    單片機(jī)系統(tǒng)<b class='flag-5'>實(shí)現(xiàn)</b>延時(shí)的<b class='flag-5'>兩種方法</b>解析

    提升家里網(wǎng)速的兩種方法

    總是嫌家里的網(wǎng)速慢,看視頻“轉(zhuǎn)圈圈”,玩游戲“時(shí)延高”,如何提升家里的網(wǎng)速呢?這里介紹兩種方法
    的頭像 發(fā)表于 02-19 21:10 ?1.4w次閱讀
    提升家里網(wǎng)速的<b class='flag-5'>兩種方法</b>

    片機(jī)實(shí)現(xiàn)延時(shí)的兩種方法

    來(lái)源:大魚(yú)機(jī)器人 第一篇 實(shí)現(xiàn)延時(shí)通常有兩種方法:一種是硬件延時(shí),要用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);另一種是軟件延時(shí),這種方法主要采用循環(huán)體進(jìn)行
    的頭像 發(fā)表于 09-11 14:29 ?2962次閱讀

    單片機(jī)實(shí)現(xiàn)延時(shí)兩種方法

    實(shí)現(xiàn)延時(shí)通常有兩種方法:一種是硬件延時(shí),要用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);另一種是軟件延時(shí),這種方法主要采用循環(huán)體進(jìn)行。▍1 、使用定時(shí)器/計(jì)數(shù)
    發(fā)表于 11-04 15:36 ?12次下載
    單片機(jī)<b class='flag-5'>實(shí)現(xiàn)</b>延時(shí)<b class='flag-5'>兩種方法</b>

    STM32操作矩陣鍵盤(pán)的兩種方法——掃描和中斷

    目錄STM32操作矩陣鍵盤(pán)的兩種方法——掃描和中斷一、矩陣鍵盤(pán)的結(jié)構(gòu)和原理二、掃描式矩陣鍵盤(pán)的原理和實(shí)現(xiàn)三、中斷式矩陣鍵盤(pán)的原理和實(shí)現(xiàn)四、兩種方案優(yōu)劣STM32操作矩陣鍵盤(pán)的
    發(fā)表于 11-26 13:36 ?36次下載
    STM32操作矩陣鍵盤(pán)的<b class='flag-5'>兩種方法</b>——掃描和中斷

    LDO在IoT中省電的兩種方法

    LDO在IoT中省電的兩種方法
    發(fā)表于 11-04 09:50 ?0次下載
    LDO在IoT中省電的<b class='flag-5'>兩種方法</b>

    簡(jiǎn)述安裝打印機(jī)驅(qū)動(dòng)的兩種方法

    安裝打印機(jī)驅(qū)動(dòng)通常有兩種方法,一種是直接使用驅(qū)動(dòng)文件自帶的安裝程序自動(dòng)安裝,而另一種方法就是我們自己手動(dòng)進(jìn)行安裝。兩種方法各有利弊,日常工作中可以根據(jù)實(shí)際情況來(lái)選擇使用哪種方法進(jìn)行安裝
    的頭像 發(fā)表于 04-04 09:46 ?4523次閱讀
    簡(jiǎn)述安裝打印機(jī)驅(qū)動(dòng)的<b class='flag-5'>兩種方法</b>

    個(gè)實(shí)現(xiàn)一個(gè)隊(duì)列方法

    數(shù)據(jù)結(jié)構(gòu),同時(shí)也存在某種聯(lián)系。可以實(shí)現(xiàn)隊(duì)列隊(duì)列也可以
    的頭像 發(fā)表于 10-08 15:54 ?749次閱讀