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

    文章

    7553

    浏览量

    88798
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    40250
  • 队列
    +关注

    关注

    1

    文章

    46

    浏览量

    10932
收藏 人收藏

    评论

    相关推荐

    Linux端口的开启的两种方法需要掌握

    Linux端口的开启的两种方法需要掌握
    发表于 11-28 10:05 1281次阅读

    两种方法解决电路设计问题

    将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 6535次阅读
    创建主/从SPI接口的<b class='flag-5'>两种方法</b>详谈

    使用jdbc连接上oracle的两种方法

    本文主要介绍了使用jdbc连接上oracle的两种方法:1、 使用thin连接,2、 使用oci连接(Oracle Call Interface)
    发表于 02-06 10:43 1743次阅读

    你还会手写队列队列的基本实现程序说明

    昨天跟一个CSDN上的朋友聊天,他说现在如果让他自己手写一个或者队列,估计都要写蛮久的,平时虽然都在用,但是都是别人封装好的集合。确实,经典的数据结构,包括排序算法,虽然我们平时不用手写了,但是
    的头像 发表于 11-11 11:34 2867次阅读

    单片机系统实现延时的两种方法解析

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。
    发表于 01-24 17:06 1.4w次阅读
    单片机系统<b class='flag-5'>实现</b>延时的<b class='flag-5'>两种方法</b>解析

    提升家里网速的两种方法

    总是嫌家里的网速慢,看视频“转圈圈”,玩游戏“时延高”,如何提升家里的网速呢?这里介绍两种方法
    的头像 发表于 02-19 21:10 1.5w次阅读
    提升家里网速的<b class='flag-5'>两种方法</b>

    片机实现延时的两种方法

    来源:大鱼机器人 第一篇 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行
    的头像 发表于 09-11 14:29 3131次阅读

    单片机实现延时两种方法

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高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 5035次阅读
    简述安装打印机驱动的<b class='flag-5'>两种方法</b>

    实现一个队列方法

    数据结构,同时也存在某种联系。可以实现队列队列也可以
    的头像 发表于 10-08 15:54 873次阅读