首页 > 其他分享 >用队列实现栈

用队列实现栈

时间:2024-03-10 10:44:05浏览次数:14  
标签:队列 pop que1 实现 int que2 que

力扣225. 用队列实现栈

思路:主要是出栈操作,可以使用两个队列,出栈时将入栈队列中数据压入辅助队列中,直到入栈队列只剩下一个数据就是栈顶元素,然后再把辅助队列中元素全部压回入栈队列中,清空辅助队列

public:
    queue<int> que1;
    queue<int> que2;
    MyStack() {

    }
    
    void push(int x) {
        que1.push(x);
    }
    
    int pop() {
        while(que1.size()!=1){
            que2.push(que1.front());
            que1.pop();
        }
        int result = que1.front();
        que1.pop();

        // while(!que2.empty()){
        //     que1.push(que2.front());
        //     que2.pop();
        // }

        que1 = que2;            // 再将que2赋值给que1
        while (!que2.empty()) { // 清空que2
            que2.pop();
        }
        
        return result;
    }
	
    int top() {
        return que1.back();;
    }
    
    bool empty() {
        return que1.empty();
    }
};

优化,其实只需要一个队列就能实现,出栈时只需将元素压入队列尾部

class MyStack {
public:
    queue<int> que;
    /** Initialize your data structure here. */
    MyStack() {

    }
    /** Push element x onto stack. */
    void push(int x) {
        que.push(x);
    }
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int size = que.size();
        size--;
        while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
            que.push(que.front());
            que.pop();
        }
        int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了
        que.pop();
        return result;
    }

    /** Get the top element. */
    int top() {
        return que.back();
    }

    /** Returns whether the stack is empty. */
    bool empty() {
        return que.empty();
    }
};

标签:队列,pop,que1,实现,int,que2,que
From: https://www.cnblogs.com/haof31/p/18063820

相关文章

  • 用栈实现队列
    用栈实现队列,需要两个栈,一个定义为stackIn,另一个定义为stackOut牛客NC76用两个栈实现队列1、队列的push()操作这个直接将数据压入stcakIn,就行voidpush(intnode){ stackIn.push(node);}2、队列的pop()操作这里有两种解法解法一:当stcakOut为空时再将stackIn中的数据......
  • 使用C#和MemoryCache组件实现轮流调用APIKey以提高并发能力
    文章信息标题:使用C#和MemoryCache组件实现轮流调用APIKey以提高并发能力的技巧摘要:本文介绍了如何利用C#语言中的MemoryCache组件,结合并发编程技巧,实现轮流调用多个APIKey以提高系统的并发能力。通过示例代码和详细说明,读者将了解如何有效地管理APIKey的调用次数限制,并优化系......
  • 量子力学2-量子力学的应用与实现
    by东北育才学校S361qjc0714我们熟知,人类历史上有几次重要的工业革命,推进了人们科技的发展:工业1.0是蒸汽机时代,工业2.0是电气化时代,工业3.0是信息化时代,而工业4.0则是利用信息化技术促进产业变革的时代,也就是智能化时代.量子力学的诞生为人类未来的工业4.0打下了基础.1980年......
  • 使用AT+MQTT指令连接华为云实现数据上传
    1准备工作硬件设备模块:ESP-01-S固件烧录工具:ESP8266下载器串口调试工具:VOFA+参考文章:stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与下发的命令处理2固件更新2.1为什么要重新安装固件由于ESP-01-S模块出厂没有集成MQTT指令,故需要自己下载固件包,详见官网固......
  • 2024-03-09:用go语言,我们把无限数量的栈排成一行,按从左到右的次序从 0 开始编号, 每个栈
    2024-03-09:用go语言,我们把无限数量的栈排成一行,按从左到右的次序从0开始编号,每个栈的的最大容量capacity都相同。实现一个叫「餐盘」的类DinnerPlates,DinnerPlates(intcapacity)-给出栈的最大容量capacity,voidpush(intval)将给出的正整数val推入从左往右第一个......
  • delphi 判断类是否实现接口,获取类实现的接口
    判断类是否实现接口,获取类实现的接口代码typeICeShi=interface['{37CABB9D-CAA2-4589-A0C8-5AA1424E525B}']functionToPrint:string;end;TCeShi=class(TInterfacedObject,ICeShi)functionToPrint:string;end;procedureTForm1.Button1Cli......
  • 扇区级别访问是指直接读取或写入硬盘上的单个扇区,而不是按文件或目录进行访问。下面是
    扇区级别访问是指直接读取或写入硬盘上的单个扇区,而不是按文件或目录进行访问。下面是扇区级别访问的技术实现原理:硬盘控制器:硬盘控制器是负责管理硬盘读写操作的组件。它负责接收来自主机的指令,并将其转换为硬盘可以理解的命令。硬盘控制器通过与硬盘上的磁头和扇区进行交......
  • Python基于TCP实现聊天功能
    Server端importsocketimportqueueimportthreadingimporttimeserversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostname()print("服务器IP:"+socket.gethostbyname(host))serversocket.bind((host,9090))serversock......
  • Qt 使用第三方libmodbus库实现Modbus通讯
    之前发表的Modbus通讯程序使用了QT自带的Modbus库,由于QT自带库的数据响应使用的是信号和槽来实现的,所以在一些读写频率较高的场景下,会引发很多异常问题,此篇文章使用C语言写的第三方Modbus库来实现modbus通讯。 经程序运行测试,调用该库进行modbus通讯完虐QT自带mosbus库。......
  • ubuntu c语言 opencv实现h265 编码
    在Ubuntu上使用C语言和OpenCV实现H.265编码,你可以遵循以下步骤:安装依赖:首先确保你的系统已经安装了Ubuntu最新版本,并更新所有包列表。安装FFmpeg,因为OpenCV使用FFmpeg来处理视频编码。可以使用以下命令安装:复制sudoaptupdatesudoaptinstallffmpeg安装OpenCV:OpenCV库本......