offer150-9:用两个栈实现队列

题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个方法,appendTail和deleteHead,分别完成在队列尾部插入节点的在队列头部删除节点的功能。

template<typename T>class Queue{
    public:
            Queue();
            ~Queue();
            void appendTail(const T& node);
            T deleteHead();
    private:
            stack<T> stack1;
            stack<T> stack2;
};

    队列是先进先出的数据结构,栈是后进先出的数据结构,用两个栈来模拟队列,可以用一个栈来存放进入元素,也就是说,这个栈来进行appendTail()操作;用另一个栈来弹出元素,即用来进行deleteHead()操作,当两个栈都为空时,队列为空。

代码:

tmplate<typename T>
    void Queue<T>::appendTail(const T& element){
        stack1.push(element);
}

template<typename T>
    T Queue<T>::deleteHead(){
        if(stack2.empty()){                //如果stack2为空
             while(!stack1.empty(){        //那么就将stack1中的所有元素Push到stack2中
                T& data = stack1.top();    //此时statck2栈顶是最先进入到队列(stack1)中的元素
                stack1.pop();
                stack2.push(data);
            }           
        }
        if(stack2.empty()){
            cout<<"queue is empty!\n";  //如果两个栈都为空
            throw new exception();
        }
        T head = stack2.top();
        statck2.pop();
        return head;                    //返回stack2栈顶元素
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值