使用栈实现队列的下列操作:

  • push(x) -- 将一个元素放入队列的尾部。
  • pop() -- 从队列首部移除元素。
  • peek() -- 返回队列首部的元素。
  • empty() -- 返回队列是否为空。

示例:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false

说明:

  • 你只能使用标准的栈操作 -- 也就是只有 push to toppeek/pop from topsize, 和 is empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
  • 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。

/*
算法思想:
由于队列是先进先出的,而栈是先进后出的,所以要用2个栈来实现队列的入队出队功能,队列的入队功能与栈的一样,出队时,先将第一个栈中的元素全部弹出,并倒入到第二个栈中,将第二个栈中栈顶元素弹出,并将stack2中剩下的元素倒回到stack1中,即实现一次出队。
*/
//算法实现:
class MyQueue {
public:
/** Initialize your data structure here. */ stack<int> s1, s2; MyQueue() { } /** Push element x to the back of queue. */
void push(int x) {
while(!s2.empty()) {
s1.push(s2.top());
s2.pop();
}
s2.push(x);
while(!s1.empty()) {
s2.push(s1.top());
s1.pop();
}
} /** Removes the element from in front of queue and returns that element. */
int pop() {
int a = s2.top();
s2.pop();
return a;
} /** Get the front element. */
int peek() {
return s2.top();
} /** Returns whether the queue is empty. */
bool empty() {
return s2.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();
*/

最新文章

  1. visio二次开发——图纸解析之形状
  2. [Leetcode] Course Schedule
  3. SharePoint Online 创建门户网站系列之准备篇
  4. C# 发邮件
  5. IOS Delegate &amp; protocal
  6. spring quartz 定时任务“Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder”“Checking for available updated version of Quartz”
  7. uinty3d使用ugui封装一个分页控件
  8. LPC1788的内部EEPROM使用
  9. intelliJ IDEA创建web工程
  10. centos7搭建SVN+Apache+IF.svnadmin实现web管理SVN
  11. Head First 设计模式 第3章 装饰者模式
  12. Shell Script编程——USB挂载/复制文件/查找文件/压缩文件
  13. 《Java从入门到放弃》JavaSE入门篇:面向对象语法一(入门版)
  14. 软件工程(GZSD2015)学生博客列表
  15. Bzoj4869: [Shoi2017]相逢是问候
  16. Egret的容器--删除对象,遮罩
  17. OC闪屏页尺寸
  18. Flex外包公司——案例汇总
  19. 锁、C#中Monitor和Lock以及区别
  20. 基于 OpenSSL 的 CA 建立及证书签发

热门文章

  1. 基于Dokcer搭建Redis集群搭建(主从集群)
  2. VMware虚拟机下Centos8 设置静态IP地址
  3. Linux文件权限问题
  4. Java-静态关键字Static&amp;静态代码块
  5. docker 添加Portainer容器图形化管理工具
  6. ES6、ES7、ES8
  7. Docker(五):Docker安装Elasticsearch
  8. 抢先看:笔者亲历的2020年中国.NET开发者大会活动纪实
  9. Hive中的UDF详解
  10. Docker 部署 _实现每日情话 定时推送(apscheduler)