洛谷-P1449 后缀表达式

重操旧业~
本菜鸡看到题就只会想到数组,但后来发现不可行,出去俩元素,还得进来一个元素,不好调o(╥﹏╥)o
emm...但还是有所收获的,'2'转2,利用'2'-'0',而不是直接强制int转换哦
同时也发现被题中举的例子迷惑了,数字可不一定是个位数!

1、此题采用栈和二叉树的后序遍历思想(左右根)
2、运用到栈的相关函数
stack<> ss //定义栈 ss.pop() //移除栈顶元素 ss.top() //取栈顶元素 ss.push() //入栈
3.利用该图来理解~

代码见下

#include<bits/stdc++.h>
//省略 std:: 前缀
using namespace std;
int main(){
	stack<int> res;
	int left,right;
	char c;
	cin>>c;
	while(c!='@'){
		
		if(c>='0'&&c<='9'){
			left=0;
//			数字不一定是个位数,例123,所以需利用循环输入该数字 
		while(c>='0'&&c<='9'){
			left=left*10+(c-'0');
			cin>>c;
		}}
//		将.前面的数字放入栈中 
		if(c=='.'){
			res.push(left);
		}
		else{
//		top取栈顶元素,pop移除栈顶元素 
//采用后序遍历(左右根),所以右节点在栈顶 
			right=res.top();
			res.pop();
			left=res.top();
			res.pop();
			if(c=='+') res.push(left+right);
			if(c=='-') res.push(left-right);
			if(c=='*') res.push(left*right);
			if(c=='/') res.push(left/right);
		} 
//		输入下一个字符 
		cin>>c;
	}
	cout<<res.top();
	return 0;
}

最后希望zj能坚持写下去(╹▽╹)

posted @ 2025-03-16 14:58  夕瑶^  阅读(73)  评论(0)    收藏  举报