当前位置: 首页 > news >正文

栈 队列

栈:先进后出         形如:|__|

队列:先进先出     形如: |    |


 

模拟栈

#include <iostream>

using namespace std;

const int N = 100010;

int m;
int stk[N], tt;

int main()
{
    cin >> m;
    while (m -- )
    {
        string op;
        int x;

        cin >> op;
        if (op == "push")
        {
            cin >> x;
            stk[ ++ tt] = x;//插入
        }
        else if (op == "pop")
        {
            tt -- ;//弹出:栈顶下标--
        }
        else if (op == "empty") //判断是否为空
        {
            cout << (tt ? "NO" : "YES") << endl;
        }
        else 
        {
            cout << stk[tt] << endl;//访问栈顶
        }
    }

    return 0;
}

  表达式求值

#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
#include <unordered_map>

using namespace std;

stack<int> num;
stack<char> op;

void eval()
{
    auto b = num.top(); num.pop();
    auto a = num.top(); num.pop();
    auto c = op.top(); op.pop();
    int x;
    if (c == '+') x = a + b;
    else if (c == '-') x = a - b;
    else if (c == '*') x = a * b;
    else x = a / b;
    num.push(x);
}

int main()
{
    unordered_map<char, int> pr{{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}};
    string str;
    cin >> str;
    for (int i = 0; i < str.size(); i ++ )
    {
        auto c = str[i];
        if (isdigit(c))
        {
            int x = 0, j = i;
            while (j < str.size() && isdigit(str[j]))
                x = x * 10 + str[j ++ ] - '0';
            i = j - 1;
            num.push(x);
        }
        else if (c == '(') op.push(c);
        else if (c == ')')
        {
            while (op.top() != '(') eval();
            op.pop();
        }
        else
        {
            while (op.size() && op.top() != '(' && pr[op.top()] >= pr[c]) eval();
            op.push(c);
        }
    }
    while (op.size()) eval();
    cout << num.top() << endl;
    return 0;
}

 队列

#include <iostream>
using namespace std;
#include<bits/stdc++.h>
const int N = 100010;

int m;
int q[N], hh, tt = -1;

int main()
{
    cin >> m;

    while (m -- )
    {
        string op;
        int x;

        cin >> op;
        if (op == "push")
        {
            cin >> x;
            q[ ++ tt] = x;
        }
        else if (op == "pop") hh ++ ;
        else if (op == "empty") cout << (hh <= tt ? "NO" : "YES") << endl;
        else cout << q[hh] << endl;
    }

    return 0;
}

相关文章:

  • 百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中
  • vue2.x与vue3.x生命周期的比较
  • deepseek + embeding模型搭建本地知识库
  • 算法面试题
  • 设置libvirtd支持远程TCP连接
  • 【动手学强化学习】03马尔可夫决策过程
  • 【指令集】Nginx
  • day12摄影平台活动
  • 浏览器标签页通信实现打开新窗口播放音乐
  • BDF(MD)
  • DeepSeek学术秘籍:如何让DeepSeek辅助论证?
  • 2月第九讲“探秘Transformer系列”
  • 无人机航迹规划: 梦境优化算法(Dream Optimization Algorithm,DOA)求解无人机路径规划MATLAB
  • Android设备 网络安全检测
  • CAS单点登录(第7版)27.开发人员
  • wx061基于ssm+vue+uniapp的疫情期间学生请假与销假系统小程序
  • Vue CLI 配置与插件
  • 1.【BUUCTF】[SUCTF 2019]EasyWeb
  • 【Docker】Docker Run 中指定 `bash` 和 `sh` 参数的区别:深入解析与实践指南
  • openGauss 3.0 数据库在线实训课程16:学习逻辑结构:表管理4
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高
  • 巴菲特股东大会4.5万字问答实录:股神60年穿越牛熊的最新心得和人生思考
  • 上千游客深夜滞留张家界大喊退票?当地通报情况并致歉
  • 外交部亚洲司司长刘劲松就日本民用飞机侵闯我钓鱼岛领空向日方提出严正交涉
  • 酒店民宿一房难求,湖北宣恩文旅局工作人员腾出家中空房给游客救急
  • 澎湃读报丨央媒头版头条集中刊发:大国应有的样子