队列的声明如下:
template<typename T> class CQueue
{
public:
CQueue() {}
~CQueue() {}
void appendTail(const T& node); // 入队
void deleteHead(); // 出队
private:
T> m_stack1;
T> m_stack2;
};
实现队列
template<typename T> void CQueue<T>::appendTail(const T& element)
{
// push the new element into m_stack1
m_stack1.push(element);
}
template<typename T> void CQueue<T>::deleteHead()
{
// if m_stack2 is empty, and there are some
// elements in m_stack1, push them in m_stack2
if(m_stack2.size() <= 0)
{
while(m_stack1.size() > 0)
{
T& data = m_stack1.top();
m_stack1.pop();
m_stack2.push(data);
}
}
// push the element into m_stack2
assert(m_stack2.size() > 0);
m_stack2.pop();
}
入队:直接进栈S1
出队:通过栈2来实现FIFO。栈2为空,则直接将栈1放入栈2,再从栈2出栈,栈2不空,则直接从栈2出栈。
本文介绍了一种使用两个栈实现队列的方法。入队操作直接将元素压入第一个栈,而出队操作则需要检查第二个栈是否为空,若为空则将第一个栈的所有元素依次弹出并压入第二个栈,最后从第二个栈中弹出顶部元素完成出队。
176万+

被折叠的 条评论
为什么被折叠?



