Leetcode NO.232 Implement Queue using Stacks
2015-10-05 08:50
381 查看
本题题目要求如下:
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).
整体思路并不难,就是用两个stack实现,这两个stack合起来就是一个queue,如下图所示:
假设中间有这么一种状态,左边stack的top是queue的back,左边stack的bottom和右边stack的bottom连接,右边stack的top是queue的front
所以pop就是一直pop右边stack的元素,这样,就会出线右边的全都pop完,此时,下一个元素应该是5,所以,就把左边stack的元素逐个pop到右边stack,状态如下:
| 5 |
| 6 |
| 7 |
|NAN| | 8 |
此时,再去pop,就还是pop右边stack的元素,如果是push,就push到左边stack,如图所示:
这题并不难,叙述了一大堆,其实还是看代码最为清晰,代码如下所示:
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
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).
整体思路并不难,就是用两个stack实现,这两个stack合起来就是一个queue,如下图所示:
| 8 | | 1 | | 7 | | 2 | | 6 | | 3 | | 5 | | 4 |
假设中间有这么一种状态,左边stack的top是queue的back,左边stack的bottom和右边stack的bottom连接,右边stack的top是queue的front
所以pop就是一直pop右边stack的元素,这样,就会出线右边的全都pop完,此时,下一个元素应该是5,所以,就把左边stack的元素逐个pop到右边stack,状态如下:
| 5 |
| 6 |
| 7 |
|NAN| | 8 |
此时,再去pop,就还是pop右边stack的元素,如果是push,就push到左边stack,如图所示:
| 5 | | 6 | | 10| | 7 | | 9 | | 8 |
这题并不难,叙述了一大堆,其实还是看代码最为清晰,代码如下所示:
class Queue { public: // Push element x to the back of queue. void push(int x) { my_stack.push(x); } // Removes the element from in front of queue. void pop(void) { if (tmp_stack.empty()) { move(); } tmp_stack.pop(); } // Get the front element. int peek(void) { if (tmp_stack.empty()) { move(); } return tmp_stack.top(); } // Return whether the queue is empty. bool empty(void) { return (my_stack.empty() and tmp_stack.empty()); } private: stack<int> my_stack; stack<int> tmp_stack; void move(void) { while (!my_stack.empty()) { tmp_stack.push(my_stack.top()); my_stack.pop(); } } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性