栈是先入后出,队列是先入先出
假设我们入队列的元素为a->b->c 则出队列的顺序为a->b->c,先入先出。
思路:
入队列:直接压入stack1
入队列时stack2为空
出队列:则将stack1中的全部元素依次弹出,直到stack1为空,再依次压入stack2。依次弹出可以出队列。
入队列时stack2不为空
出队列:先将stack2中的元素弹出出队列,然后再把stack1中的元素出队列
实现代码如下:
template<typename T>class CQueue
{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}
template<typename T> void CQueue<T>::appendTail(const T& element)
{
stack1.push(element);
}
template<typename 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=stack1.top();
stack2.pop();
return Head;
}