ZISUOJ 数据结构-栈

题目列表:

问题 A: 数据结构-栈-括号匹配

思路:

        遇到左半边括号,将其入栈,遇到右半边括号,则先判断栈是否为空,若为空,则匹配失败,若不为空,则再判断栈顶元素是否是与之匹配的左半边括号,若不是,则匹配失败,一直匹配到栈空,如果栈空,则匹配成功,否则匹配失败

参考题解:

#include<bits/stdc++.h>
using namespace std;
stack<char> stk;
string line;
int main(){cin.tie(nullptr)->sync_with_stdio(false);getline(cin,line);for(auto c:line){if(c=='(') stk.push(c);else if(c==')'){if(stk.empty()){cout << "NO\n";return 0; }else{if(stk.top()=='(') stk.pop();}}}cout << (stk.empty()?"YES\n":"NO\n");return 0;
}

问题 B: 数据结构-栈-车厢顺序

思路:

        这个题也不知道怎么说思路,反正是很经典的一个题,如果实在不懂,可以去查一查资料。

参考题解:
 

#include<bits/stdc++.h>
using namespace std;
constexpr int MAXN = 1e3+5;
int n,cnt = 1;
array<int,MAXN> a;
stack<int> stk;
int main(){cin.tie(nullptr)->sync_with_stdio(false);cin >> n;for(int i = 0;i<n;i++) cin >> a[i];for(int i = 0;i<n;i++){while(cnt<=a[i]){stk.push(cnt++);}if(stk.top()==a[i]) stk.pop();else{cout << "NO\n";return 0;}}cout << "YES\n";return 0;
}

问题 C: 数据结构-栈-括弧匹配检验

思路:

        跟第一题相似,注意括号对应匹配即可。

参考题解:

#include<bits/stdc++.h>
using namespace std;
stack<char> stk;
string line;
unordered_map<char,char> mp = {{'(',')'},{'[',']'}};
int main(){cin.tie(nullptr)->sync_with_stdio(false);getline(cin,line);for(auto c:line){if(c=='('||c=='['){stk.push(c);}else if(c==')'||c==']'){if(stk.empty()){cout << "Wrong\n";return 0;}else{if(mp[stk.top()]==c) stk.pop();else{cout << "Wrong\n";return 0;}}}}cout << (stk.empty()?"OK\n":"Wrong\n");return 0;
}

问题 D: 数据结构-栈-字符串匹配

 

思路:

        这个题相比上一题,不仅要匹配的数量更多,并且还要注意括号优先级的问题,我这里选择再加了一个哈希表来匹配优先级。

参考题解:

#include<bits/stdc++.h>
using namespace std;
stack<char> stk;
string line;
int n;
unordered_map<char,char> mp = {{'<','>'},{'(',')'},{'[',']'},{'{','}'}};
unordered_map<char,int> pri = {{'<',1},{'(',2},{'[',3},{'{',4}};
void solve(){cin >> line;while(stk.size()) stk.pop();for(char c:line){if(c=='<'||c=='('||c=='['||c=='{'){if(stk.empty()) stk.push(c);else{if(pri[c]>pri[stk.top()]){cout << "NO\n";return;}else stk.push(c);}}else if(c=='>'||c==')'||c==']'||c=='}'){if(stk.empty()){cout << "NO\n";return;}else{if(mp[stk.top()]==c) stk.pop();else{cout << "NO\n";return;}}}}cout << (stk.empty()?"YES\n":"NO\n");
}
int main(){cin.tie(nullptr)->sync_with_stdio(false);cin >> n;while(n--) solve();return 0;
}

问题 E: 数据结构-栈-计算

思路:

        利用中缀表达式可以轻松求解,注意符号之间的优先级问题,计算'-'、'/'、'^'时要注意参与运算的两个数字的先后顺序。数据范围会到2^32-1,要开long long,虽然这个题的后台测试点没有取到那么大,不过根据题意还是要这么做的。

参考题解:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
stack<char> op;
stack<ll> num;
unordered_map<char,int> pri={{'+',1},{'-',1},{'*',2},{'/',2},{'^',3}};
ll x;
string line;
bool flag;
void cal(){ll num1 = num.top();num.pop();ll num2 = num.top();num.pop();char op1 = op.top();op.pop();if(op1=='+') num.push(num1+num2);else if(op1=='-') num.push(num2-num1);else if(op1=='*') num.push(num1*num2);else if(op1=='/') num.push(num2/num1);else if(op1=='^') num.push(pow(num2,num1));
}
int main(){cin.tie(nullptr)->sync_with_stdio(false);cin >> line;for(auto c:line){if(c>='0'&&c<='9'){x=x*10+c-'0';flag = true;}else{if(flag){num.push(x);flag = false;x = 0;} if(c=='('){op.push(c);}else if(c==')'){while(op.top()!='('){cal();}op.pop();}else{while(op.size()&&pri[op.top()]>=pri[c]){cal();}op.push(c);}}}if(flag){num.push(x);x = 0;flag = false;}while(op.size()){cal();}cout << num.top() << '\n';return 0;
}

问题 F: 数据结构-栈-中缀表达式值

 

思路:

        跟上一题同理,但是这个题额外要注意的是可能存在负数,并且要判断该中缀表达式的合理性。

参考题解:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
stack<char> op;
stack<ll> num;
unordered_map<char,int> pri={{'+',1},{'-',1},{'*',2},{'/',2},{'^',3}};
ll x;
string line;
bool flag;
void cal(){ll num1 = num.top();num.pop();ll num2 = num.top();num.pop();char op1 = op.top();op.pop();if(op1=='+') num.push(num1+num2);else if(op1=='-') num.push(num2-num1);else if(op1=='*') num.push(num1*num2);else if(op1=='/') num.push(num2/num1);else if(op1=='^') num.push(pow(num2,num1));
}
void solve(){for(auto c:line){if(c>='0'&&c<='9'){x=x*10+c-'0';flag = true;}else{if(flag){num.push(x);flag = false;x = 0;}if(c=='@') break;else if(c=='('){op.push(c);}else if(c==')'){while(op.top()!='('){cal();}op.pop();}else{while(op.size()&&pri[op.top()]>=pri[c]){cal();}op.push(c);}}}if(flag){num.push(x);x = 0;flag = false;}while(op.size()){cal();}cout << num.top() << '\n';
}
bool check(){if(line.size()==2) return pri[line[0]]>0?false:true;for(int i = 1;i<line.size()-1;i++){if(pri[line[i]]&&pri[line[i-1]]) return false;}ll sum = 0;for(int i = 0;i<line.size()-1;i++){if(line[i]=='(') sum++;else if(line[i]==')') sum--;}return sum==0;
}
int main(){cin.tie(nullptr)->sync_with_stdio(false);cin >> line;if(line[0]=='-') num.push(0);if(!check()) cout << "NO\n";else solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/310484.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase2.x学习笔记

文章目录 一、HBase 简介1、HBase 定义1.1 概述1.2 HBase 与 Hadoop 的关系1.3 RDBMS 与 HBase 的对比1.4 HBase 特征简要 2、HBase 数据模型2.1 HBase 逻辑结构2.2 HBase 物理存储结构2.3 HBase的表数据模型 3、HBase 基本架构3.1 Master3.2 Region Server3.3 Zookeeper3.4 HD…

Python进阶编程 --- 2.MySQL、pymysql、PySpark

文章目录 第一章&#xff1a;SQL基础入门1.1 数据库数据库如何存储数据 1.2 数据库和SQL的关系1.3 MySQL版本1.4 命令提示符内使用MySQL1.5 SQL概述1.5.1 SQL语言分类1.5.2 SQL语言特性 1.6 DDL库管理表管理 1.7 DML - 数据操作1.8 DQL - 查询和计算数据1.8.1 基础数据查询1.8.…

gitlab(docker)安装及使用

GitLab GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。 下载(docker) 查询docker镜像gitlab-ce gitlab-ce是它的社区版 [rootlocalhost ~]# docker search gitlab-ce NAME …

《Kubernets证书篇:基于Kylin V10+ARM架构CPU修改K8S 1.26.15版本证书时间限制》

一、背景 Kubernetes 默认的证书有效期只有1年&#xff0c;因此需要每年手动更新一次节点上面的证书&#xff0c;特别麻烦而且更新过程中可能会出现问题&#xff0c;因此我们要对 Kubernetes 的 SSL 证书有效期进行修改&#xff0c;这里将证书的时间限制修改为100年。 环境信息…

快速掌握Spring监控(Spring Boot admin)

监控 监控可视化监控平台Admin底层逻辑info 自定义端点 监控 监控的作用&#xff1a; 监控服务状态是否宕机监控服务运行指标&#xff08;内存&#xff0c;虚拟机&#xff0c;线程&#xff0c;请求等&#xff09;监控日志管理服务&#xff08;服务下线&#xff09; 监控的实…

【Linux】磁盘管理和文件系统

目录 一、硬盘 1.硬盘结构 2.结构类型 二、MBR与磁盘分区 1.MBR主引导记录 2.磁盘分区结构 三、文件系统类型 四、linux系统添加并使用新硬盘的步骤 1.添加新的硬盘 2.刷新识别 3.进行分区 4.格式化&#xff0c;创建文件系统 5.挂载使用 一、硬盘 1.硬盘结构…

部署项目的时候的一些错误

项目打jar包&#xff0c;找不到资源&#xff0c;连接不上数据库 项目打包后无法运行 直接在idea运行可以 解决方法&#xff1a;pom文件中增加&#xff08;配置文件如果是yml&#xff0c;写yml&#xff09; <resources><resource><directory>src/main/java&…

物联网的核心价值是什么?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网&#xff0c;这个词汇在当今的科技领域已经变得耳熟能详。但当我们深入探索物联网的核心价值时&#xff0c;我们会发现它远不止是一个简单的技术概念&#xff0c;而是一种能够彻底改变我们生活方式和工作方式的革命性力量。 物联网…

Niobe WiFi IoT开发板OpenHarmony内核编程开发——message

本示例将演示如何在Niobe WiFi IoT开发板上使用cmsis 2.0 接口进行消息队列开发 message API分析 osThreadNew() osThreadId_t osThreadNew(osThreadFunc_t func, void *argument,const osThreadAttr_t *attr )描述&#xff1a; 函数osThreadNew通过将线程添加到活动线程列表…

游戏生成式 AI:编织梦想,避开阴影

想象一下&#xff0c;一个沉浸式的游戏世界中玩家遇到的每个 NPC 都由 AI 驱动&#xff0c;他们能与玩家进行互动&#xff0c;从改变游戏体验。据 Inword 一项研究显示&#xff0c;绝大多数游戏玩家渴望这种互动&#xff0c;愿意投入更多的时间和金钱来玩这种由 AI 驱动的游戏。…

ActiveMQ主从架构和集群架构的介绍及搭建

一、主从和集群架构的特点 1.1 主从架构的-Master/slave模式特点 读写分离&#xff0c;纵向扩展&#xff0c;所有的写操作一般在master上完成&#xff0c;slave只提供一个热备 1.2 集群架构-Cluster模式特点 分布式的一种存储&#xff0c;水平的扩展&#xff0c;消息的分布…

idm线程越多越好吗 idm线程数多少合适 IDM百度云下载 IDM下载器如何修改线程数

IDM&#xff08;Internet Download Manager&#xff09;是一款流行的网络下载器&#xff0c;它支持多线程下载&#xff0c;这意味着它可以同时建立多个连接来下载文件的不同部分&#xff0c;从而提高下载速度。我们在使用IDM的时候总是有很多疑问&#xff0c;今天我们学习IDM线…

STM32H7上实现AD5758驱动

目录 概述 1 下载ADI 5758 Demo 2 AD5758驱动的移植 2.1 使用STM32CubeMX创建工程 2.2 接口函数实现 2.2.1 驱动接口列表 2.2.2 函数实现 2.2.3 修正ad5758驱动 3 AD5758应用程序 3.1 编写测试程序 3.1.1 配置参数结构 3.1.2 配置参数函数 3.1.3 读取参数函数 3.…

docker-compose部署RabbitMQ(一步到位)

docker-compose如下 version: 3.1 services:rabbitmq:restart: alwaysimage: rabbitmq:managementcontainer_name: rabbitmqhostname: rabbitports:- 5672:5672- 15672:15672environment:TZ: Asia/ShanghaiRABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes…

SpringBoot 启动分析

一、序言 本文简单分析一下 SpringBoot 的启动流程。 二、SpringBoot 启动源码分析 public ConfigurableApplicationContext run(String... args) {// 记录当前时间的纳秒数&#xff0c;用于计算应用程序启动所花费的时间long startTime System.nanoTime();// 创建一个默认…

蓝桥杯2024年第十五届省赛

E:宝石组合 根据给的公式化简后变为gcd(a,b,c)根据算数基本定理&#xff0c;推一下就可以了 然后我们对1到mx的树求约数&#xff0c;并记录约数的次数&#xff0c;我们选择一个最大的且次数大于等3的就是gcd int mx; vector<int> g[N]; vector<int> cnt[N]; int…

VSCode中vue的packag.json报错:unable to load schema from‘ http://json.schema‘...问题解决

package.json有这个报错&#xff0c;类似于这种问题一般是网络连接有问题&#xff0c;无法加载重启一下就好。 但是如果是没有网络或者云桌面等环境不能连接外网&#xff0c;就在设置中把这个设置一下&#xff0c;这样就不报错了&#xff0c;根据需要选择处理。

MybatisPlus实现数据权限隔离

引言 Mybatis Plus对Mybatis做了无侵入的增强&#xff0c;非常的好用&#xff0c;今天就给大家介绍它的其中一个实用功能&#xff1a;数据权限插件。 数据权限插件的应用场景和多租户的动态拦截拼接SQL一样。建议点赞收藏关注&#xff0c;方便以后复习查阅。 依赖 首先导入M…

X-314智能合约:金融创新的强大引擎

&#x1f4a5;火爆到烫手的X-314智能合约&#x1f525; X-314智能合约是基于以太坊区块链开发的&#xff0c;具有高度可定制性和灵活性。 ave开单独板块&#xff1b;详细资料已经准备好&#xff1b;对web3感兴趣的大佬货&#xff1b;多交流多指导&#x1f91d; ​X-314智能合…

Android Studio通过修改文件gradle-wrapper.properties内容下载gradle

一、问题描述 在Android Studio中新建项目后会下载你所新建的项目的activity/gradle/wrapper目录下所配置的gradle-7.3.3-bin.zip包&#xff08;笔者的是该版本包&#xff09;&#xff0c;而大多数时候会下载失败&#xff0c;如下 二、解决办法 新建工程后&#xff0c;取消下…