插入元素时压入stack1,删除元素时将stack1中的元素逐个弹出并压入stack2,元素在stack2中的顺序正好和原来在stack1中相反。stack2中的栈顶元素是最先进入的元素。
#include<iostream>
#include<stack>
using namespace std;
template<class T>
class CQueue
{
public:
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
template<class T>
void CQueue<T>::appendTail(const T& node)
{
stack1.push(node);
}
template<class T>
T CQueue<T>::deleteHead()
{
if (stack2.size() <= 0)
{
while (stack1.size() > 0)
{
T data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if (stack2.size() == 0)
throw new exception("queue is empty");
T head = stack2.top();
stack2.pop();
return head;
}
int main()
{
CQueue<int> q1;
for (int i = 0; i < 10; i++)
q1.appendTail(i);
for (int i = 0; i < 10; i++)
cout << q1.deleteHead() << " ";
}