栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指 09.两个栈实现一个队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 09.两个栈实现一个队列

class CQueue {
public:
    stack st1,st2;  //st1 做插入队列,st2 做删除队列
    CQueue() {
       // while(!st1.empty()) st1.pop();  //初始化,把栈中元素清空(也可以不用)
       // while(!st2.empty()) st2.pop();  //初始化,把栈中元素清空(也可以不用)
    }
    
    void appendTail(int value) {
        st1.push(value);   //有元素来直接插入
    }
    
    int deleteHead()
     {
        if (st1.empty()&&st2.empty())  //如果两个队列都为空,直接返回
        {
            return -1;   
          
        }
        else if(!st2.empty())  如果 st2 不空,就要把 st2 先删空
        {   
                int tp= st2.top();
                st2.pop();
                return tp;
        }
        else if(!st1.empty()&&st2.empty())  //当 st2 空了,就看 st1 空不空
        {
            while(!st1.empty())   //要确保把目前 st1 中的全部 push 到 st2,为了保证先进先出的
            {
                st2.push(st1.top());
                st1.pop();
            }
            int tp2=st2.top();
            st2.pop();
            return tp2;
        }
        return -1;
    }

};
//要保证一堆一堆地删,不然 st2 还有的,st1 的 push 到 st2 中,顺序就问题了

 代码可能不够优雅,有错误望指出。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号