LeetCode 225 Implement Stack using Queues(用队列来实现栈)(*)
2016-01-20 21:28
561 查看
翻译
[code]用队列来实现栈的如下操作。 push(x) —— 将元素x添加进栈 pop() —— 从栈顶移除元素 top() —— 返回栈顶元素 empty() —— 返回栈是否为空 注意: 你必须使用一个只有标准操作的队列。 也就是说,只有push/pop/size/empty等操作是有效的。 队列可能不被原生支持,这取决于你所用的语言。 只要你只是用queue的标准操作,你可以用list或者deque(double-ended queue)来模拟队列。 你可以假设所有的操作都是有效的(例如,pop或peek操作不会被用在空栈上)。
原文
[code]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 empty operations 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).
分析
对栈和队列不清楚的话,可以先看这篇图文介绍:【算法】7 分不清栈和队列?一张图给你完整体会至于这道题目,有一道非常非常类似的题目。本题是用队列来实现栈,下面这题是用栈来实现队列,因为在上一篇中讲解过,原理是一样的,大家可以自己看看:LeetCode 232 Implement Queue using Stacks(用栈来实现队列)(*)
代码
[code]class Stack { public: queue<int> q, q2; // Push element x onto stack. void push(int x) { q.push(x); } // Removes the element on top of the stack. void pop() { if (q.size() == 1) q.pop(); else { while (q.size() > 1) { q2.push(q.front()); q.pop(); } q.pop(); while (q2.size() > 0) { q.push(q2.front()); q2.pop(); } } } // Get the top element. int top() { if (q.size() == 1) return q.front(); while (q.size() > 1) { q2.push(q.front()); q.pop(); } int temp = q.front(); q2.push(q.front()); q.pop(); while (q2.size() > 0) { q.push(q2.front()); q2.pop(); } return temp; } // Return whether the stack is empty. bool empty() { return q.empty(); } };
相关文章推荐
- mui中文在线手册及教程文档
- HDU1242 Rescue(BFS松弛)
- C#queue队列总结
- LeetCode 232 Implement Queue using Stacks(用栈来实现队列)(*)
- HBuilder mui引导页制作
- HBuilder教程
- Ubuntu 安装FMS A required package, libcap, was not found 解决方案
- UML建模之时序图(Sequence Diagram)
- 定义DoubleArray并将其作为value写入SequenceFile
- Arduino接口-week3-Lesson1
- Item 21: 比起直接使用new优先使用std::make_unique和std::make_shared
- Rescue
- ui课程(tableViewCustoomCell)
- Java4Android之BlockingQueue
- ALTER SEQUENCE 修改序列解决唯一约束冲突 unique constraint violated
- CodeForces 176C Playing with Superglue 博弈论
- ALTER SEQUENCE 修改序列解决唯一约束冲突 unique constraint violated
- APUE读书笔记
- 2016.01.19 UITextField
- UIView常用的方法