剑指 | 7-利用两个栈构建一个队列
题目描写叙述: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