解析:
栈的特点是“先进后出”,队列的特点是“先进先出”。
由此,可以将一个栈用来add值,另一个用来del值。现将数插入stack1,然后将stack1中的数push到stack2,此时由于栈1先进后出,此时数据已被颠倒,stack2进行pop,就可以了。
代码:
#include<iostream>
#include<stack>
using namespace std;
template<typename T>
class Queue
{
public:
void Addval(const T &val);
T Delval();
private:
stack<T> stack1;
stack<T> stack2;
};
template<typename T>
void Queue<T>::Addval(const T&val)
{
stack1.push(val);
}
template<typename T>
T Queue<T>::Delval()
{
if (stack1.empty() && stack2.empty())
{
throw new exception("queue is empty");
}
if (stack2.size()<=0)
{
while (stack1.size() > 0)
{
T tmp = stack1.top();
stack1.pop();
stack2.push(tmp);
}
}
T ret = stack2.top();
stack2.pop();
return ret;
}
int main()
{
Queue<int > que;
que.Addval(1);
que.Addval(2);
que.Addval(3);
int ret = que.Delval();
cout << ret << endl;
int ret2 = que.Delval();
cout << ret2 << endl;
int ret3 = que.Delval();
cout << ret3 << endl;
return 0;
}
push:1 2 3
pop:1 2 3