博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个栈实现一个队列
阅读量:5125 次
发布时间:2019-06-13

本文共 1212 字,大约阅读时间需要 4 分钟。

用两个栈实现一个队列的功能。

解题思路

假设两个栈A和B,且都为空。

栈A提供push()功能,栈B提供pop()功能。

  • 入队列:入栈A。

  • 出队列:
    • 假设栈B不为空。直接弹出B的元素。

    • 假设栈B为空,则依次弹出栈A的元素并压入栈B中,再弹出B中的元素。

实现代码

#include 
#include
using namespace std;template
class MyQueue{public: void push(const T& t) { s1.push(t); } void pop() { if (s2.empty()) { while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } s2.pop(); } T& top() { if (s2.empty()) { while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } return s2.top(); } bool empty() const { return s1.empty() && s2.empty(); }private: stack
s1; stack
s2;};int main(){ MyQueue
myque; for (int i = 0; i < 10; i++) { myque.push(i); } while (!myque.empty()) { cout<
<<" "; myque.pop(); }}

注意:pop()top()中没有再加上if (!s2.empty())的推断,我觉得此处应该由使用者来推断MyQueue对象是否为空。降低一些不必要的推断能够提高程序效率。

转载于:https://www.cnblogs.com/liguangsunls/p/6999251.html

你可能感兴趣的文章
Javascript设置对象属性为"只读"
查看>>
iOS MBProgressHUD 之带底板的加载提示
查看>>
四则运算心得
查看>>
「一本通 4.1 练习 2」简单题
查看>>
Mybatis 系列2-配置文件
查看>>
Buying Feed, 2010 Nov (单调队列优化DP)
查看>>
【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
查看>>
一行代码为UITextField添加收键盘功能
查看>>
重启模块与及关开邮件存储设置功能页面-PHP-shell-py
查看>>
DNS协议详解
查看>>
[OJ] Matrix Zigzag Traversal
查看>>
2015-7.7森林探秘季
查看>>
千位分隔符的完整攻略
查看>>
PHP 递归删除目录中文件
查看>>
小甲鱼Python笔记(下)
查看>>
面试题19:二叉树镜像
查看>>
Android端实时音视频开发指南
查看>>
C++ 一键关闭屏幕
查看>>
关于生活
查看>>
基金基础知识
查看>>