您的位置:首页 > 其它

剑指 | 7-利用两个栈构建一个队列

2015-07-25 21:35 501 查看
题目描述:http://ac.jobdu.com/problem.php?pid=1512

用两个栈来实现一个队列,完成队列的Push和Pop操作。

队列中的元素为int类型。

解析:

定义2个栈s1, s2

1. 开始时,将元素push进s1

2. front()或pop()时,将s1的数据,出栈,顺序压入s2; 此时发现 s2 的出栈顺序即队列的出队列顺序。

3. 再次push时,仍然 push 进 s1

4. front()或pop()时,如果 s2 为空,则将 s1 的所有数据压入 s2

将 s1 作为入队列的栈,将 s2 作为出队列的栈,当 s2 为空时,将 s1 的所有内容压入 s2

#include <iostream>
#include <stack>
using namespace std;
template <class T>
class MyQueue {
private:
stack<T> s1, s2;
public:
void push(T val) {
s1.push(val);
}
T front() {
if (s2.empty()) {
if (s1.empty())
return -1; //队列为空,返回-1
while (s1.empty() == false) {
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
}
void pop() {
if (s2.empty()) {
if (s1.empty())
return;
while (s1.empty() == false) {
s2.push(s1.top());
s1.pop();
}
}
s2.pop();
return;
}
};
int main() {
MyQueue<int> q;
q.push(1);
q.push(2);
int val = q.front();
q.pop();
cout << val << endl;
q.push(3);
q.pop();
val = q.front();
cout << val << endl;
}


结果为:
1
3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: