C++/stack_queue

目录

1.stack

1.1stack的介绍

 1.2stack的使用

练习题:

 1.3stack的模拟实现

2.queue的介绍和使用

2.1queue的介绍

 2.2queue的使用

2.3queue的模拟实现 

 3.priority_queue的介绍和使用

3.1priority_queue的介绍

 3.2priority_queue的使用


欢迎

1.stack

1.1stack的介绍

cplusplus.com/reference/stack/stack/?kw=stack

 1.2stack的使用

接口 说明
stack() 构造空的栈
empty() 检测stack是否为空
size() 返回stack中元素的个数
top() 返回栈顶元素的引用
push()

将元素val压入stack中

pop() 将stack中尾部的元素弹出

练习题:

155. 最小栈 - 力扣(LeetCode)

 

class MinStack {
public:
    MinStack() {
        
    }
    
    void push(int val) {
        _st.push(val);
        if(_minst.empty() || val<=_minst.top())//比较,如果小于当前最小值,则插入_minst中
            _minst.push(val);
    }
    
    void pop() {
        if(_st.top() == _minst.top())//如果相等,两个栈一起删除该数据
            _minst.pop();
        _st.pop();
    }
    
    int top() {
        return _st.top();
    }
    
    int getMin() {
        return _minst.top();//返回最小栈的栈顶数据,即最小元素
    }
private:
    stack<int> _st;
    stack<int> _minst;//辅助栈(最小栈):将当前val与栈顶数据比较,将最小值入栈,即记录当前最小值
};

栈的压入、弹出序列_牛客题霸_牛客网

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pushV int整型vector
     * @param popV int整型vector
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        size_t pushi = 0, popi = 0;
        stack<int> st;
        while (pushi < popV.size())
        {
            st.push(pushV[pushi++]);//1.先入栈pushi位置的数据
            while (!st.empty() && popV[popi] == st.top())
             //栈顶数据跟popi位置序列数据比较,如果匹配则出栈,popi++
             //如果不匹配继续入栈
            {
                popi++;
                st.pop();
            }
        }
        return st.empty();//如果匹配则栈为空,不匹配栈不为空
    }
};

150. 逆波兰表达式求值 - 力扣(LeetCode)

#include <vector>
#include <stack>
#include <string>

class Solution {
public:
    // 定义函数 evalRPN,接收一个存储字符串的向量 tokens 作为参数,返回逆波兰表达式的计算结果
    int evalRPN(vector<string>& tokens) {
        // 创建一个整数类型的栈 s,用于存储操作数
        stack<int> s;
        // 使用范围 for 循环遍历 tokens 向量中的每个字符串元素,str 是对当前元素的引用
        for(auto& str : tokens) {
            // 检查当前字符串是否为运算符(+、-、*、/)
            if("+" == str || "-" == str || "*" == str || "/" == str) {
                // 若为运算符,从栈中弹出栈顶元素作为右操作数
                int right = s.top();
                s.pop();
    
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pzn)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值