笔试面试之栈实现队列

本文介绍了一种使用两个栈实现队列的方法。入队操作直接将元素压入第一个栈,而出队操作则需要检查第二个栈是否为空,若为空则将第一个栈的所有元素依次弹出并压入第二个栈,最后从第二个栈中弹出顶部元素完成出队。

队列的声明如下:

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出栈。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值