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

    文章

    6986

    浏览量

    88931
  • 函数
    +关注

    关注

    3

    文章

    4325

    浏览量

    62552
  • 队列
    +关注

    关注

    1

    文章

    46

    浏览量

    10891
收藏 人收藏

    评论

    相关推荐

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

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

    队列

    队列:1、队列定义:限定仅只能在表尾端进行插入和删除的线性表。顶:表尾端被称之为顶。
    发表于 08-13 13:50 0次下载

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

    昨天跟CSDN上的朋友聊天,他说现在如果让他自己手写或者队列,估计都要写蛮久的,平时虽
    的头像 发表于 11-11 11:34 2797次阅读

    两个接触器如何实现顺序启动

    今天小编给大家分享电路,两个电机顺序启动电路,这张图是实物接线,我们可以看到两个接触器,一个时间继电器,
    的头像 发表于 05-14 17:10 7705次阅读

    两个接触器如何实现顺序启动

    两个接触器实现控制电动机或电器有很多种方法;可以用种SA转换开关去分别控制几个KA继电器,再由继电器与接触器相互控制来完成任务。不过这种控制方法
    的头像 发表于 02-12 02:38 7404次阅读
    <b class='flag-5'>两个</b>接触器如何<b class='flag-5'>实现</b>顺序启动

    深入浅出了解单调和单调队列

    内单调递增或单调递减的内元素是有序的,单调队列同样也是。 下面我们通过几个题目由浅入深,
    的头像 发表于 02-02 10:18 1468次阅读
    深入浅出了解单调<b class='flag-5'>栈</b>和单调<b class='flag-5'>队列</b>

    两个S7-200-PLC之间Modbus通讯实现(从站)

    两个S7-200-PLC之间Modbus通讯实现(从站)方法
    发表于 04-25 11:24 28次下载

    队列实现原理是什么?队列实现方案有哪几种?

    种后进先出的数据结构,而队列种先进先出的数据结构,者原理不难理解,使用也简单。
    的头像 发表于 07-04 13:28 2728次阅读
    <b class='flag-5'>队列</b><b class='flag-5'>实现</b><b class='flag-5'>栈</b>原理是什么?<b class='flag-5'>队列</b><b class='flag-5'>实现</b><b class='flag-5'>栈</b>方案有哪几种?

    TencentOS-tiny中环形队列实现

    1. 什么是队列队列(queue)是种只能在端插入元素、在另端删除元素的数据结构,遵循「先入先出」(FIFO)的规则。 队列中有
    的头像 发表于 10-08 16:30 1377次阅读

    简述Labview使用队列的区别

    简述Labview使用队列的区别
    发表于 01-19 09:50 9次下载

    宽带如何装两个路由器

    二级路由器、路由器改当交换机、无线桥接这三种,今天我们就来看下前面实现宽带装两个路由器的设置?
    发表于 07-29 16:59 7.1w次阅读

    两个LED和两个按钮的使用

    电子发烧友网站提供《两个LED和两个按钮的使用.zip》资料免费下载
    发表于 01-30 16:04 1次下载
    <b class='flag-5'>两个</b>LED和<b class='flag-5'>两个</b>按钮的使用

    stm32单片机如何实现按键切换两个程序?

    stm32单片机如何实现按键切换两个程序? 作为款功能强大的微控制器,STM32单片机可以支持多种应用场景,其中
    的头像 发表于 09-14 14:22 6082次阅读

    队列实现两种方法

    两个队列实现 思路:两个
    的头像 发表于 10-08 16:01 651次阅读

    两个硬盘2系统开机切换

    准备、系统安装、系统切换和注意事项。 、硬件准备 在开始之前,我们首先要确保我们有两个可用的硬盘,每个硬盘上都可以安装操作系统。我们建议使用
    的头像 发表于 11-28 15:08 7725次阅读