[leetcode] 232. Implement Queue using Stacks
2016-07-19 13:22
302 查看
Implement the following operations of a queue using stacks.
push(x) -- Push element x to the back of queue.
pop() -- Removes the element from in front of queue.
peek() -- Get the front element.
empty() -- Return whether the queue is empty.
Notes:
You must use only standard operations of a stack -- which means only
and
Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
解法一:
简单的说就是改变push函数。讲一个要存成1,2,3,4的queue,变成1,2,3,4的stack。于是,我们有q.pop() <-> s.pop(), q.peek() <->s.top(), q.empty()<->s.empty(). 在push()中,需要一个辅助stack去存储后的stack。
解法二:
思路是维护两个stack, _new和_old。新进来的数都push到_new中,需要pop()或者peek()的时候,如果_old为空,将_new的数倒序放到_old里面,然后对_old里最top的数操作。如果_old不为空,直接在其top上操作。
push(x) -- Push element x to the back of queue.
pop() -- Removes the element from in front of queue.
peek() -- Get the front element.
empty() -- Return whether the queue is empty.
Notes:
You must use only standard operations of a stack -- which means only
push to top,
peek/pop from top,
size,
and
is emptyoperations are valid.
Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
解法一:
简单的说就是改变push函数。讲一个要存成1,2,3,4的queue,变成1,2,3,4的stack。于是,我们有q.pop() <-> s.pop(), q.peek() <->s.top(), q.empty()<->s.empty(). 在push()中,需要一个辅助stack去存储后的stack。
class Queue { public: // Push element x to the back of queue. void push(int x) { stack<int> tmp; while(!s.empty()){ tmp.push(s.top()); s.pop(); } tmp.push(x); while(!tmp.empty()){ s.push(tmp.top()); tmp.pop(); } } // Removes the element from in front of queue. void pop(void) { s.pop(); } // Get the front element. int peek(void) { return s.top(); } // Return whether the queue is empty. bool empty(void) { return s.empty(); } private: stack<int> s; };
解法二:
思路是维护两个stack, _new和_old。新进来的数都push到_new中,需要pop()或者peek()的时候,如果_old为空,将_new的数倒序放到_old里面,然后对_old里最top的数操作。如果_old不为空,直接在其top上操作。
class Queue { public: // Push element x to the back of queue. void push(int x) { _new.push(x); } // Removes the element from in front of queue. void pop(void) { shiftStack(); _old.pop(); } // Get the front element. int peek(void) { shiftStack(); return _old.top(); } // Return whether the queue is empty. bool empty(void) { return _new.empty() && _old.empty(); } void shiftStack(){ if(_old.empty()){ while(!_new.empty()){ _old.push(_new.top()); _new.pop(); } } } private: stack<int> _new, _old; };
相关文章推荐
- RM格式压缩电影软件 Easy RealMedia Producer Full V1.94 下载
- 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
- 比较简单的jquery教程 Easy Ajax with jQuery 中文版全集第1/3页
- Easy RM RMVB to DVD Burner v1.3.8 汉化版 下载 附注册码
- Expandable "Detail" Table Rows
- linux下安装easy_install的方法
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- python在Windows下安装setuptools(easy_install工具)步骤详解
- 归纳整理文件Easy Duplicate Finder2.24 破解版
- DM*** and Easy *** Server with ISAKMP Profiles
- easy ***
- cisco packet tracer 5.3 实现基于3A的easy ***
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart