57.用俩个栈实现队列。
题目:某队列的声明如下:
template<typename T> class CQueue
{
public:
CQueue() {}
~CQueue() {}
void appendTail(const T& node); // append a element to tail
void deleteHead(); // remove a element from head
private:
Stack<T> m_stack1;
Stack<T> m_stack2;
题目:某队列的声明如下:
template<typename T> class CQueue
{
public:
CQueue() {}
~CQueue() {}
void appendTail(const T& node); // append a element to tail
void deleteHead(); // remove a element from head
private:
Stack<T> m_stack1;
Stack<T> m_stack2;
};
思路:
使用m_stack1的push操作模拟队列的入队操作,出队操作时,队首元素在m_stack1底部,将m_stack1元素全部倒入m_stack2中,将出队操作转换为m_stack2的pop操作。
代码:
template<typename T> class CQueue
{
public:
CQueue() {}
~CQueue() {}
void appendTail(const T& node); // append a element to tail
void deleteHead(); // remove a element from head
private:
stack<T> m_stack1;
stack<T> m_stack2;
};
template<typename T>
void CQueue<T>::appendTail(const T& node)
{
m_stack1.push(node);
}
template<typename T>
void CQueue<T>::deleteHead()
{
if (m_stack2.empty())
{
if (m_stack1.empty())
{
cout << "queue empty!" << endl;
return;
}
while (!m_stack1.empty())
{
m_stack2.push(m_stack1.top());
m_stack1.pop();
}
}
m_stack2.pop();
}