首页 > 其他分享 >代码随想录:用栈实现队列

代码随想录:用栈实现队列

时间:2024-12-10 22:56:42浏览次数:4  
标签:target 队列 top 随想录 pop int 用栈 push empty

代码随想录:用栈实现队列

主要是记一下栈和队列的定义和基本使用方法,值得注意的是pop和push都是操作,没有返回值,需要先用top和front获得顶端的值。

这个地方有个记忆技巧,栈只看“顶部顶端”,队列看“前后端”,即top和front


- **创建栈**
  ```cpp
  std::stack<int> s;
  • 检查是否为空

    bool isEmpty = s.empty();
    
  • 获取栈的大小

    int size = s.size();
    
  • 访问栈顶元素

    int topElement = s.top();
    
  • 添加元素(压栈)

    s.push(10);
    
  • 删除元素(弹栈)

    s.pop();
    
  • 创建队列

    std::queue<int> q;
    
  • 检查是否为空

    bool isEmpty = q.empty();
    
  • 获取队列的大小

    int size = q.size();
    
  • 访问队头元素

    int frontElement = q.front();
    
  • 添加元素(入队)

    q.push(10);
    
  • 删除元素(出队)

    q.pop();
    

代码有优化空间,懒得改了

```cpp
class MyQueue {
public:
//通过另一个栈,每次push的时候把push的元素压到栈底
    stack<int> temp;
    stack<int> target;
    MyQueue() {
        
    }
    
    void push(int x) {
        while(!target.empty()){
            temp.push(target.top());
            target.pop();
        }
        target.push(x);
        while(!temp.empty()){
            target.push(temp.top());
            temp.pop();
        }
    }
    
    int pop() {
        int val= target.top();
        target.pop();
        return val;
    }
    
    int peek() {
        return target.top();
    }
    
    bool empty() {
        return target.empty();
    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

标签:target,队列,top,随想录,pop,int,用栈,push,empty
From: https://www.cnblogs.com/huigugu/p/18598167

相关文章

  • 代码随想录:用队列实现栈
    代码随想录:用队列实现栈classMyStack{public://pop就是拿队列的最后一个元素,只需要用另一个队列对现有队列遍历,拿到最后一个元素即可queue<int>target;MyStack(){}voidpush(intx){target.push(x);}intp......
  • 代码随想录day14 | leetcode 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 1
    226.翻转二叉树前序和后序写法都可以我用的是前序错误写法classSolution{publicTreeNodeinvertTree(TreeNoderoot){if(root==null)returnnull;swap(root.left,root.right);invertTree(root.left);invertTree(root.r......
  • 【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
    目录......
  • 一片代码让你搞懂队列(用顺序表实现队列)
    基础数据结构---------队列将持续更新基础数据结构和算法用得到的零基础语法:类,数组,函数,初始化列表,构造函数,析构函数,标准输入输出流,指针,if-else语句,for循环,动态内存管理(堆区)#include<iostream>usingnamespacestd;#include<stdexcept>template<typenamet>classqueue{......
  • 代码随想录算法训练营第二十五天|491.递增子序列、46.全排列、47。全排列ii。
    491.递增子序列1.递归传参:多加一个startIndex来控制每次递归起始位置即可。2.终止条件:其实可以不加终止条件,因为startIndex每次都会+1,不会无线递归,但是题目要求子序列大小至少为2,所以size>2就行。3.单层搜索逻辑:如下图,同一父节点下的同层上的元素使用过就不能再使用了。......
  • 代码随想录算法训练营第三十八天|leetcode322. 零钱兑换、leetcode279.完全平方数、le
    1leetcode322.零钱兑换题目链接:322.零钱兑换-力扣(LeetCode)文章链接:代码随想录视频链接:动态规划之完全背包,装满背包最少的物品件数是多少?|LeetCode:322.零钱兑换哔哩哔哩bilibili思路:感觉跟之前的方法思路差不多,就是对dp初始化的时候,我开始弄错了,应该初始成无限大,对dp[......
  • 商业版vs开源版:一图看懂云消息队列 RocketMQ 版核心优势
    十年磨砺,应“云”而生云消息队列RocketMQ版是阿里云基于ApacheRocketMQ构建的低延迟、高并发、高可用、高可靠的分布式“消息、事件、流”统一处理平台。自2012年诞生于阿里巴巴集团的核心交易链路以来,RocketMQ经历了多次“双十一”的万亿级数据洪峰验证。2015年,阿里......
  • 栈和队列的应用 ——球钟算法
    栈和队列的应用——球钟算法1.球钟背景球钟是一个利用球的移动来记录时间的简单装置它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器,小时指示器若分钟指示器中有两个球,五分钟指示器有六个球,小时指示器有五个球,那就代表时间是5:322.工作原理每过一分钟球钟就......
  • 代码随想录第五十二天
    101.孤岛的总面积题目描述给定一个由1(陆地)和0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆......
  • 代码随想录第五十一天
    99.岛屿数量题目描述给定一个由1(陆地)和0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。输入描述第一行包含两个整数N,M,表示矩阵的行数和列数。后续N行,每行包含M个数字,数字为......