标签:两个栈实现一个队列
用两个栈实现一个队列
算法思想:
(1)stack1用来存储入队的元素,所以入队就是把进来的元素push到stack1;
(2)对于出队列,一开始stack2是空的,所以我们把stack1中的元素全部pop到stack2中,这样stack2的栈顶就是队头,只要stack2不为空,那么每次出队,就相当于stack2的pop;
(3)接下来,每入队一个元素,需要判断stack1是否为空,如果为空,需将stack2的元素pop到stack1,再将入队元素push到stack1。每出队一个元素,如果stack2不为空,就从stack2中pop一个元素,如果stack2不为空,需要重复上面的操作—把stack1中的元素pop到stack2中。
#include<iostream>
#include <stack>
using namespace std;
template<class T>
class Queue
{
public:
void push(const T& x)
{
if (s1.empty())
{
while (!s2.empty())
{
s1.push(s2.top());
s2.pop();
}
}
s1.push(x);
cout << x << endl;
}
void pop()
{
if (s2.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
cout << s2.top() << endl;
s2.pop();
}
const T& front()
{
if (s2.empty())
return s2.top();
while (!s1.empty())
{
s2.push(s1.top);
s1.pop();
}
return s2.top();
}
bool isEmpty()
{
return s1.isEmpty() && s2.isEmpty();
}
private:
stack<T> s1;
stack<T> s2;
};
void test()
{
Queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.pop();
q.push(5);
q.pop();
}
int main()
{
test();
return 0;
}
本文出自 “aiqinhai” 博客,请务必保留此出处http://07282.blog.51cto.com/10617067/1711597
标签:两个栈实现一个队列
原文地址:http://07282.blog.51cto.com/10617067/1711597