首页 > 其他分享 >每日一题-数据结构

每日一题-数据结构

时间:2022-12-06 11:58:45浏览次数:36  
标签:ch 每日 pop num push 一题 数据结构 top op

#include <bits/stdc++.h>

using namespace std;

unordered_map<char, int> pr = {{'*', 2}, {'/', 2}, {'+', 1}, {'-', 1}};

stack<int> num;

stack<char> op;

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

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

用栈模拟对中缀表达式求值.

标签:ch,每日,pop,num,push,一题,数据结构,top,op
From: https://www.cnblogs.com/whose-dream/p/16954802.html

相关文章

  • 每日一题-数论
    数论Description\[给定n,m\in[1,1e9]\\找到使得res=n\cdotx末尾零的个数最多,结果最大的x,其中,\\x\in[1,m]\]Solution容易联想到经典题目,求阶乘末尾零......
  • 图-数据结构
    图阅读本文的一些约定:顶点==节点当前节点==该节点何为邻接矩阵:表示顶点之间相邻关系的矩阵何为权值:是路由器通过路径选择算法为网络上的路径产生的一个数字。......
  • Java使用LinkedList模拟一个堆栈或者队列数据结构
    用Java模拟一个堆栈或者队列数据结构。首先得明白堆栈和队列的数据结构:堆栈:先进后出队列:先进先出LinkedList中刚好有addFirst()和addLast()方法。1.publicclassStac......
  • 数据结构(C语言版)
    数据结构(C语言版)作者:李云清 杨庆红 揭安全出版社:人民邮电出版社 一、概论1.1数据结构的基本概念与术语1.2数据类型和抽象数据类型1.3算法和算法分析1.4......
  • [go-每日一库] go-gin项目使用realize实现代码、文件改动热更新
    之前用django编写web应用时,每次保存,django应用都是重新加载-热更新,最近在写gin应用,了解到golang常用的热更新可以用到fresh/gin/gowatch/bee/realize/air等,本文主要分享rea......
  • 数据结构导论——总结
    目录​​一、背景介绍​​​​二、学习思路​​​​三、学习过程​​​​四、学习总结​​​​收获​​​​提出的问题​​​​五、升华​​一、背景介绍数据结构学习了N遍......
  • java并发数据结构之CopyOnWriteArrayList
    CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对......
  • 第322场周赛第一题
    句子是由单个空格分隔的一组单词,且不含前导或尾随空格。例如,"HelloWorld"、"HELLO"、"helloworldhelloworld"都是符合要求的句子。单词仅由大写和小写英文字母组......
  • redis底层数据结构总结
    hash:是一维数组加链表 ziplink:压缩列表相当于数组,链表查询速度快,查找慢跳表:是个有序的链表,实现有序数组的二分查找,缺点是占用更多的内存空间。跳表是每隔2个元素选出一......
  • ES6的Map数据结构
           ......