zoukankan      html  css  js  c++  java
  • 面试题7:用两个栈实现队列

    题目描述

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

    template <typename T> class CQueue
    {
    public:
        CQueue(void);
        ~CQueue(void);
        
        // 在队列末尾添加一个结点
        void appendTail(const T& node);
    
        // 删除队列的头结点
        T deleteHead();
    
    private:
        stack<T> stack1;
        stack<T> stack2;
    };

    题目分析

    剑指Offer(纪念版)P59

    代码实现

    下面这两个函数的组合共同保证了队列插入删除的正确性,单个意思不大。

    template <typename T> 
    void CQueue<T>::appendTail(const T& element)
    {
        stack1.push(element);
    } 
    
    template <typename T> 
    T CQueue<T>::deleteHead()
    {
        if(stack2.size()<= 0)
        {
            while(stack1.size()>0)
            {
                T& data = stack1.top();
                stack1.pop();
                stack2.push(data);
            }
        }
    
        if(stack2.size() == 0)
            throw new exception("queue is empty");
    
        T head = stack2.top();
        stack2.pop();
    
        return head;
    }
    

      

  • 相关阅读:
    2020年4月13日
    2021年4月12日
    梦断代码阅读笔记02
    Shell基本命令
    远程链接Linux
    Linux文档与目录结构
    VMware与Centos系统安装
    linux 第一天
    day88 Vue基础
    python 生成随机验证码
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4831222.html
Copyright © 2011-2022 走看看