当前位置: 首页 > news >正文

数据结构模拟-用栈实现队列

用栈实现队列的基本操作,包括pop(), push(), empty(), peek().

可以用两个栈来实现,一个栈保存入队的一端,也就是队尾,一个栈保存出队的一端,也就是队首。当遇到出队pop()时,如果stack out不为空,直接出栈,如果为空,那么先将stack in栈中所有的元素移动到stack out中,由于两个栈先进后出的特性,相当于负负得正,正好将stack in栈中想反的先后顺序更正了过来。

232. 用栈实现队列 - 力扣(LeetCode)

参考代码如下:

class MyQueue {
private:
    stack<int> inSt;//队尾,入队
    stack<int> outSt;//队首,出队

public:
    MyQueue() {}

    void push(int x) { inSt.push(x); }//入队,加入stack in栈中

    int pop() {//出队,按照上述的逻辑过程
        if(outSt.empty()){
             while (!inSt.empty()) {
            outSt.push(inSt.top());
            inSt.pop();
        }
        }
       int res = outSt.top();
       outSt.pop();
        return res;
    }

    int peek() {//返回队首元素,复用pop()
        int res = this->pop();
        outSt.push(res);
        return res;
    }

    bool empty() {//两个栈都为空,说明队列为空
        return inSt.empty() && outSt.empty();
    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

相关文章:

  • 搭建Redis主从集群
  • 学习c++多线程前,回顾一下Linux的多线程
  • Linux网络相关概念和重要知识(3)(TCP套接字编程、远程命令的实现)
  • C/S与B/S架构
  • this.centerDialogVisible = true this.$nextTick(()=>{ this.resetForm(); })
  • this(执行上下文)
  • 1 存储过程学习: 使用DMSQL程序的优点
  • 如果vue加载页面的时候,需要加载很多子vue ,能不能先加载一个,让页面处于能用的状态,多余的在后台加载。
  • Java 基础入门代码示例解析
  • 使用Python调用Jenkins Api之获取构建日志使用说明文档
  • SpringBoot 3.0之后为什么移除了spring.factories
  • 好好学Docker:基于Docker buildx构建多平台镜像【转载】
  • Python爬取微博签到数据(2025年3月更)
  • python的文件上传
  • 单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结
  • 【MySQL】JDBC —— Java 连接 MySQL
  • Qt 隐式共享
  • Java「Deque」 方法详解:从入门到实战
  • 信息安全和病毒防护——入侵检测技术
  • selenium基本使用(二)九种定位方法
  • 音著协宣布胜诉,虎牙公司终审被判侵权
  • 建筑瞭望|从黄浦江畔趸船改造看航运设施的升级与利用
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 商务部:对原产于美国、欧盟、台湾地区和日本的进口共聚聚甲醛征收反倾销税
  • 博物馆书单|走进博物馆,去体验一场与文明的对话
  • 多少Moreless:向世界展示现代中式家具的生活美学