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" />

精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用隊列實現棧的兩種方法

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

兩個隊列實現一個棧

思路:兩個隊列實現一個棧,使用了隊列交換的思想。

代碼如下:

type MyStack struct {
    queue1, queue2 []int
}

//構造函數
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個元素。

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

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

不斷執行 push 操作就行。

一個隊列實現一個棧

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

代碼如下:

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
}

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7430

    瀏覽量

    87734
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40095
  • 隊列
    +關注

    關注

    1

    文章

    46

    瀏覽量

    10889
收藏 人收藏

    評論

    相關推薦

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

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

    兩種方法解決電路設計問題

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

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

    目錄STM32操作矩陣鍵盤的兩種方法——掃描和中斷一、矩陣鍵盤的結構和原理二、掃描式矩陣鍵盤的原理和實現三、中斷式矩陣鍵盤的原理和實現四、兩種方案優劣STM32操作矩陣鍵盤的
    發表于 08-12 06:33

    隊列

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

    創建主/從SPI接口的兩種方法詳談

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

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

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

    你還會手寫隊列隊列的基本實現程序說明

    昨天跟一個CSDN上的朋友聊天,他說現在如果讓他自己手寫一個或者隊列,估計都要寫蠻久的,平時雖然都在用,但是都是別人封裝好的集合。確實,經典的數據結構,包括排序算法,雖然我們平時不用手寫了,但是
    的頭像 發表于 11-11 11:34 ?2781次閱讀

    單片機系統實現延時的兩種方法解析

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

    提升家里網速的兩種方法

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

    片機實現延時的兩種方法

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

    單片機實現延時兩種方法

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

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

    目錄STM32操作矩陣鍵盤的兩種方法——掃描和中斷一、矩陣鍵盤的結構和原理二、掃描式矩陣鍵盤的原理和實現三、中斷式矩陣鍵盤的原理和實現四、兩種方案優劣STM32操作矩陣鍵盤的
    發表于 11-26 13:36 ?36次下載
    STM32操作矩陣鍵盤的<b class='flag-5'>兩種方法</b>——掃描和中斷

    LDO在IoT中省電的兩種方法

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

    簡述安裝打印機驅動的兩種方法

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

    實現一個隊列方法

    數據結構,同時也存在某種聯系。可以實現隊列隊列也可以
    的頭像 發表于 10-08 15:54 ?781次閱讀