欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

数据结构实验之栈与队列三:后缀式求值

发布时间:2025/3/21 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 数据结构实验之栈与队列三:后缀式求值 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。

Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。

Output
求该后缀式所对应的算术表达式的值,并输出之。

Sample
Input
59684/-3+#
Output
57
Hint
基本操作数都是一位正整数!
规则:
从左到右遍历表达式的每个数字和字符,遇到数字就进栈,遇到符号,就将处于栈顶的两个数字出栈,进行运算,运算的结果在进栈,一直到最终获得结果。

#include<bits/stdc++.h>using namespace std;#define intsize 100000 #define addsize 100000typedef int elemtype;typedef struct {elemtype *base;elemtype *top;int stacksize; } Sqstack;int initstack(Sqstack &s) {s.base = (elemtype *)malloc(intsize *sizeof(elemtype));if(!s.base)return -1;s.top = s.base;s.stacksize = intsize;return 0; }int push(Sqstack &s, elemtype x) {if(s.top - s.base > s.stacksize){s.base = new elemtype[intsize + addsize];if(!s.base) return -1;s.top = s.base + addsize;s.stacksize += addsize;}*s.top++ = x;return 0; }elemtype pop(Sqstack &s) {elemtype x;return x = *--s.top; }void change(Sqstack &s, elemtype n) {int e1, e2;if(n == '+'){e1 = pop(s);e2 = pop(s);push(s, e1 + e2);}else if(n == '-'){e1 = pop(s);e2 = pop(s);push(s, e2 - e1);}else if(n == '*'){e1 = pop(s);e2 = pop(s);push(s, e1 * e2);}else if(n == '/'){e1 = pop(s);e2 = pop(s);push(s, e2 / e1);} }void show(Sqstack &s) {while(s.top != s.base){printf("%d", pop(s));}printf("\n"); }int main() {Sqstack s;char n;initstack(s);while(~scanf("%c", &n) && n != '#'){if(n >= '0' && n <= '9'){push(s, n - '0');}else{change(s, n);}}show(s);return 0; } 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的数据结构实验之栈与队列三:后缀式求值的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。