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

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

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

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

麥辣雞腿堡 ? 來源:盼盼編程 ? 作者:晨夢思雨 ? 2023-10-08 16:01 ? 次閱讀

兩個隊列實(shí)現(xiàn)一個棧

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

代碼如下:

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
}

先將元素入對到 queue2,此時 queue1 為0,交換 queue2 和 queue1。此時 queue2 為0,queue1 中有1個元素。

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

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

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

一個隊列實(shí)現(xiàn)一個棧

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

代碼如下:

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存在元素,則將新插入元素前的所有元素出隊,然后依次進(jìn)隊。這樣新插入的元素就在隊首了。

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

    關(guān)注

    19

    文章

    7360

    瀏覽量

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

    關(guān)注

    3

    文章

    569

    瀏覽量

    40072
  • 隊列
    +關(guān)注

    關(guān)注

    1

    文章

    46

    瀏覽量

    10882
收藏 人收藏

    評論

    相關(guān)推薦

    Linux端口的開啟的兩種方法需要掌握

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

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

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

    STM32操作矩陣鍵盤的兩種方法

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

    隊列

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

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

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

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

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

    你還會手寫隊列隊列的基本實(shí)現(xiàn)程序說明

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

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

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

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

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

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

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

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

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

    STM32操作矩陣鍵盤的兩種方法——掃描和中斷

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

    LDO在IoT中省電的兩種方法

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

    簡述安裝打印機(jī)驅(qū)動的兩種方法

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

    實(shí)現(xiàn)一個隊列方法

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