Week1:用两个栈实现队列

这篇具有很好参考价值的文章主要介绍了Week1:用两个栈实现队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1️⃣ 题目描述

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTaildeleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]

示例 2:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

2️⃣ 解题思路

  • 示例的含义:

    • 第一行可以理解为对队列的操作,共有三种
      ①CQueue:创建队列
      ②appendTail:入队
      ③deleteHead:出队

    • 第二行是appendTail,即入队函数的形参值。这里只有appendTail有形参值,CQueue和deleteHead没有

    • 第三行代表deleteHead,即出队函数的返回值。这里只有deleteHead有返回值,CQueue和appendTail没有。(若队列中没有元素,deleteHead返回 -1)

  • 思路:
    队列(queue)先入先出,栈(stack)先入后出。我们可以创建两个栈A和B来实现队列,其中栈A实现入队操作,栈B实现出队操作。
    图解可以看 【栈】用两个栈实现队列

    对于deleteHead,共有四种情况:

    栈A 栈B 操作
    A空 B空 返回-1
    A不空 B不空 返回 B栈顶的元素
    A空 B不空 返回 B栈顶的元素
    A不空 B空 A所有元素出栈,入栈到B中,然后返回 B栈顶的元素

    上面的四种情况根据操作可以分为三类(第二行和第三行归为一类),可以下面的结构实现:

    if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}
    

3️⃣ 代码

class CQueue {
public:
    CQueue() {}
    
    void appendTail(int value) {
        A.push(value);
    }
    
    int deleteHead() {
    	// 返回-1
        if(A.empty()&&B.empty()){
            return -1;
        }
        // 返回 B栈顶的元素
        else if(!B.empty()){
            int temp=B.top();
            B.pop();
            return temp;
        }
		// A所有元素出栈,入栈到B中,然后返回 B栈顶的元素
        else{                    
            while(!A.empty()){
                int temp=A.top();
                A.pop();
                B.push(temp);
            }
            int temp=B.top();
            B.pop();
            return temp;
        }
    }
private:
    stack<int> A,B;
};

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

4️⃣ 知识点

c++中,stack的pop() 函数并不返回被删除元素的值,而是返回 void(空类型)。因此,如果想获得从栈中弹出的元素的值,需要调用top() ,即:文章来源地址https://www.toymoban.com/news/detail-693892.html

int temp=B.top();
B.pop();
return temp;

到了这里,关于Week1:用两个栈实现队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每天一道leetcode:剑指 Offer 64. 求1+2+…+n(中等&递归)

    求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C)。 1 = n = 10000 使用递归,我们马上的想法是: 或者: 但是题目要求不能出现if、A?B:C这样的,所以,我们只能直接返回什么东西。返回什么?返回n。只不过n要进行自加

    2024年02月12日
    浏览(51)
  • 每天一道leetcode:剑指 Offer 13. 机器人的运动范围(中等&广度优先遍历&剪枝)

    地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+

    2024年02月13日
    浏览(45)
  • week1-深度学习概论

    神经网络又称人工神经网络 (ANN) 或模拟神经网络 (SNN),是机器学习的子集,同时也是深度学习算法的核心。  神经网络其名称和结构均受到人脑的启发,可模仿生物神经元相互传递信号的方式。 人工神经网络 (ANN) 由节点层组成,包含一个输入层、一个或多个隐藏层和一个

    2024年02月05日
    浏览(58)
  • 蓝桥杯冲刺 - week1

    🚩第一周从最高频-分数占比 最高 开始练习!涉及算法标签[⚽️DFS,⚽️BFS,⚽️日期问题,⚽️哈希统计] DFS 乃是暴力搜索的基础, BFS 常用于解决迷宫问题,日期问题可以视为常规题 ⏳最后三个星期大家一起冲刺,祝大家rp++🏅 如果对您有帮助的话还请动动小手 点赞👍,收藏

    2023年04月08日
    浏览(68)
  • 机器学习 监督学习 Week1

    - NumPy, a popular library for scientific computing - Matplotlib, a popular library for plotting data plt.style.use() 是 Matplotlib 库中用于设置绘图样式的函数。 通过使用 plt.style.use() 函数,我们可以方便地应用各种预定义的风格或自定义的样式表。Matplotlib 提供了许多内置风格表,包括 \\\'default\\\' (默认

    2024年02月06日
    浏览(53)
  • 力扣每日一道系列 --- LeetCode 88. 合并两个有序数组

    📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道 🌅 有航道的人,再渺小也不会迷途。 LeetCode 88. 合并两个有序数组 首先创建一个临时数组,其大小为第一个数组的大小(即nums1Size),其作用主要是。 通过循环遍历两个数组,将两个数组元素比较后较

    2024年02月04日
    浏览(51)
  • [NewStarCTF 2023 公开赛道] week1

    最近没什么正式比赛,都是入门赛,有moectf,newstar,SHCTF,0xGame都是漫长的比赛。一周一堆制。 这周newstar第1周结束了,据说py得很厉害,第2周延期了,什么时候开始还不一定,不过第一周已经结束提交了,可以发上来存下。总体来说没难题。 直接到网站解密 Brainfuck/OoK加密解密

    2024年02月07日
    浏览(54)
  • 每天一道leetcode:剑指 Offer 53 - I. 在排序数组中查找数字 I(适合初学者&二分查找)

    统计一个数字在排序数组中出现的次数。 0 = nums.length = 10^5 -10^9 = nums[i] = 10^9 nums 是一个非递减数组 -10^9 = target = 10^9 使用两次二分查找找到target在数组中的左右边界,然后长度就是右边界减去左边界再加一,最后返回长度即可。   欢迎大家在评论区讨论,如有不懂的代码部分

    2024年02月14日
    浏览(57)
  • [wp]NewStarCTF 2023 WEEK1|WEB

    考的就是敏感信息的泄露 题目提示两个  无非就最简单的三种 1.robots.txt 2.www.zip 3.index.php.swp 当然我的做法就是直接用dirsearch扫描了 得到了robots.txt和www.zip文件,访问拼接就得到了flag了   考的就是绕过客户端 JavaScript检验 上传一句话木马修改文件名后缀就行了 一句话木马内

    2024年02月07日
    浏览(38)
  • 每天一道leetcode:剑指 Offer 34. 二叉树中和为某一值的路径(中等&图论&深度优先遍历&递归)

    给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 树中节点总数在范围 [0, 5000] 内 -1000 = Node.val = 1000 -1000 = targetSum = 1000 使用递归深度优先遍历,使用前序遍历,在遍历途

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包