0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

两个栈实现一个队列方法

麦辣鸡腿堡 来源:盼盼编程 作者:晨梦思雨 2023-10-08 15:54 次阅读

栈和队列是比较基础的数据结构。无论在工作中,还是在面试中,栈和队列都用的比较多。在计算机的世界,你会看到队列和栈,无处不在。

栈:一个先进后出的数据结构

队列:一个先进先出的数据结构

栈和队列这两种数据结构,同时也存在某种联系。用栈可以实现队列,用队列也可以实现栈。

两个栈实现一个队列

思路:让数据入stack1,然后栈stack1中的数据出栈并入到栈stack2,然后出stack2。

代码如下:

type CQueue struct {
    stack1, stack2 *list.List
}

//构造函数    
func Constructor() CQueue {
        return CQueue{
        stack1: list.New(),
        stack2: list.New(),
    }
}
    
//尾部插入
func (this *CQueue) AppendTail(value int)  {
    this.stack1.PushBack(value)
}

//头部删除,back函数返回其list最尾部的值
func (this *CQueue) DeleteHead() int {
    //如果第二个栈为空
    if this.stack2.Len() == 0 {
        for this.stack1.Len() > 0 {
            this.stack2.PushBack(this.stack1.Remove(this.stack1.Back()))
        }
    }
    if this.stack2.Len() != 0 {
        e := this.stack2.Back()
        this.stack2.Remove(e)
        return e.Value.(int)
    }
    return -1
}

先调用 AppendTail 函数将所有元素插入 stack1,在调用 DeleteHead 函数将 stack1 中的元素转移到 stack2 中,再将元素再出栈。

再调用 DeleteHead 时,先判断 statck2 是否为空,为空则将 stack1 元素移动到 stack2 中,然后将 stack2 中的栈顶元素保存,并弹栈。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6512

    浏览量

    87601
  • 函数
    +关注

    关注

    3

    文章

    3881

    浏览量

    61310
  • 队列
    +关注

    关注

    1

    文章

    46

    浏览量

    10849
收藏 人收藏

    评论

    相关推荐

    labview怎样实现两个确定键分别控制两个数自加

    labview怎样实现两个确定键分别控制两个数自加
    发表于 11-14 20:11

    labview怎样实现两个确定键分别控制两个数自加

    labview怎样实现两个确定键分别控制两个数自加
    发表于 11-14 20:12

    怎么用布尔按钮,同时停止两个while循环

    大家好,如图,我需要的是读出下面那个循环里面不同事件长设定的数值,因为while循环不能跳出值,所以用了队列,但是问题是,按下这个确认键,程序就锁死了,呈现死循环了。我想问下大家怎么才能实现
    发表于 05-24 10:43

    新人求教:新下有两个vi,如何实现两个vi能同时启动?

    新人求教:我现在建了项目,这个项目下有两个vi,如何实现两个vi能同时启动,也就是我第一个
    发表于 07-25 17:29

    队列与出队列分别于两个不同的VI如何进行数据传输?

    如题,入队列与出队列分别于两个不同的VI如何进行数据传输?下图是入队列的情况,选择【生产】,循环次,入了
    发表于 02-28 16:40

    两个pdf合并成pdf的方法

    如何把两个pdf合并成pdf
    发表于 04-22 13:46

    有什么方法能够在lineout跟headphone两个输出通道实现不同信号的输出?

    我现在需要输出两个不同的信号,我直用aic23的命令:while (!DSK6713_AIC23_write(hCodec, x[sample])) 来实现输出,不过lineout跟
    发表于 08-15 10:16

    怎么实现同步FIFO 2点有两个输出eindpoints和两个端点?

    你好我想实现同步FIFO 2点有两个输出eindpoints和两个端点,我创造的这些enpoints描述符中并创建为每个端点的DMA通道
    发表于 09-20 14:06

    两个装置同时发光怎么实现

    两个装置都有灯,靠近两个装置的灯同时亮,离开两个同时灭,。只有两个靠近才可以亮,离开同时灭。通过什么可以实现
    发表于 03-05 01:42

    如何实现按键控制两个LED灯在两个状态下的自由切换?

    如何实现按键控制两个LED灯在两个状态下的自由切换?
    发表于 11-18 06:42

    两个.hex文件合成方法

    我们在写程序的时候,有时候有两个可执行文件的时候,都想使用里面的功能,但是源文件融合起来又感觉麻烦,这时候就要想到把两个.hex文件合成,也是可以使用的。提示:在合并前,
    发表于 01-27 08:21

    如何实现两个蓝牙模块的配对

    以上两个是HC-05相信各位小伙伴都对蓝牙互相传输数据的AT指令编写感到麻烦吧,用下面图片的软件轻松可以解决问题,实现蓝牙间数据的传输。在使用这个软件之前HC-05要进入AT模式,就是在EN这个引脚
    发表于 03-02 07:29

    浅析RT-Thread与FreeRTOS两个系统的实现差异

    freertos的代码,先看朱大神的freertos基础篇和高级篇的详细介绍,然后啃源码;搞懂了基本的设计思想和代码的实现逻辑。下面简单列下自己了解到的两个系统的实现差异。
    发表于 05-25 15:47

    RTThread与FreeRTOS两个系统的实现差异

    freertos的代码,先看朱大神的freertos基础篇和高级篇的详细介绍,然后啃源码;搞懂了基本的设计思想和代码的实现逻辑。下面简单列下自己了解到的两个系统的实现差异。
    发表于 09-26 18:03

    单片机两个指针msp,psp分别在什么情况下使用?

    单片机两个指针 msp,psp 分别在什么情况下使用
    发表于 11-01 07:39