Implement Stack using Queues 两个队列实现一个栈
2015-09-06 11:28
148 查看
Implement Stack using Queues
Implement the following operations of a stack using queues.push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
empty() -- Return whether the stack is empty.
Notes:
You must use only standard operations of a queue -- which means only
push to back,
peek/pop from front,
size,
and
is emptyoperations are valid.
Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.
class Stack { public: //以前是两个栈实现一个队列,现在是队列实现栈 //两个队列q1,q2 //入栈:q1/q2空,入q1;q1不为空,入q1;q2不为空,入q2; //出栈:转换到另一个队列,留下最后一个元素,用于出栈 // Push element x onto stack. void push(int x) { if(q1.empty() && q2.empty()) q1.push(x); else if(!q1.empty()) q1.push(x); else if(!q2.empty()) q2.push(x); } // Removes the element on top of the stack. void pop() { //不用考虑合法性 if(!q1.empty()) { while(q1.size()>1) { int tmp=q1.front(); q2.push(tmp); q1.pop(); } q1.pop();//最后个元素弹出 } else{ while(q2.size()>1) { int tmp=q2.front(); q1.push(tmp); q2.pop(); } q2.pop();//最后个元素弹出 } } // Get the top element. int top() { //不用考虑合法性 if(!q1.empty()) { while(q1.size()>1) { int tmp=q1.front(); q2.push(tmp); q1.pop(); } int t=q1.front();//最后个元素继续入栈 q2.push(t); q1.pop(); return t; } else{ while(q2.size()>1) { int tmp=q2.front(); q1.push(tmp); q2.pop(); } int t=q2.front();//最后个元素继续入栈 q1.push(t); q2.pop(); return t; } } // Return whether the stack is empty. bool empty() { return (q1.empty()&&q2.empty()); } queue<int> q1; queue<int> q2; };
相关文章推荐
- 实现当tableview当向上滚动时,头部添加的view看上去不随向上滚动的效果
- [LintCode]Segment Tree Build 构造线段树
- UITextView的动态适应高度处理
- SOAPUI系列14- SOAPUI 数据生成器组件使用方法
- SOAPUI系列12- 使用 SOAPUI 执行负载测试
- SOAPUI系列11- 测试步骤中设置断言
- SOAPUI系列10- SOAPUI 循环设置
- SOAPUI系列09- SOAPUI 属性传递之二
- SOAPUI系列08- SOAPUI 属性设置
- UIControl的使用
- queue
- SOAPUI系列07-SOAPUI 断言之三
- std::queue
- SOAPUI系列06-SOAPUI 断言(XPATH)
- SOAPUI系列05-SOAPUI 断言设置
- SOAPUI系列04-SOAPUI 项目新建
- 初学GtkBuilder界面开发
- SOAPUI系列03-SOAPUI 项目导入
- SOAPUI系列02-SOAPUI PRO 破解
- SOAPUI系列01-SOAPUI 安装