某队列的声明如下:
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:
T> m_stack1;
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
void printQueue();
private:
stack<T> m_stack1;
stack<T> m_stack2;
};
template<typename T> void CQueue<T>::appendTail(const T& node) {
if (node) {
m_stack1.push(node);
}
}
template<typename T> void CQueue<T>::deleteHead() {
if (!m_stack2.empty()) {
m_stack2.pop();
} else {
while (!m_stack1.empty()) {
m_stack2.push(m_stack1.top());
m_stack1.pop();
}
if (m_stack2.empty()) {
cout << "stack empty!!!" << endl;
} else {
m_stack2.pop();
}
}
}
template<typename T> void CQueue<T>::printQueue() {
cout << "当前栈:" << endl;
while (!m_stack2.empty()) {
cout << m_stack2.top() << ' ';
m_stack2.pop();
}
while (!m_stack1.empty()) {
m_stack2.push(m_stack1.top());
m_stack1.pop();
}
while (!m_stack2.empty()) {
cout << m_stack2.top() << ' ';
m_stack2.pop();
}
cout << endl;
}