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

来源:互联网 发布:floyd算法matlab代码 编辑:程序博客网 时间:2024/06/10 06:33

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

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

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

Input

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

Output

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

Example Input

59*684/-3*+#

Example Output

57

Hint

基本操作数都是一位正整数!

遇到字母入栈,遇到运算符的时候将栈顶两个元素作运算,元素出栈,运算结果入栈。

#include <stdio.h>#include <stdlib.h>typedef int elemtype;typedef int status;#define MAXSIZE 100#define OVERFLOW -2#define another 50#define true 1#define false 0typedef struct {elemtype *base;elemtype *top;int stacksize;}Sqstack;status isEmpty(Sqstack &S){if(S.top == S.base)return true;else return false;}void initStack(Sqstack &S){S.base = new elemtype[MAXSIZE];S.top = S.base;S.stacksize = MAXSIZE;}elemtype getTop(Sqstack &S){if(S.base == S.top)return false;else return *(S.top-1);}void Push(Sqstack &S, elemtype e){      //压栈if(S.top-S.base >= S.stacksize){S.base = (elemtype *)realloc(S.base,(another+S.stacksize)*sizeof(elemtype));S.top = S.base + S.stacksize;S.stacksize += another;}*S.top++ = e;}int Pop(Sqstack &S, elemtype &e){if(S.top == S.base) return false;return e = * --S.top;}int main(){int n, r;Sqstack S;initStack(S);char str[100];scanf("%s", str);for(int i = 0; str[i] != '#'; i++){if(str[i]>='0' && str[i] <= '9'){Push(S, str[i]-'0');}else if(str[i] == '*'){int a, b;Pop(S, a);Pop(S, b);Push(S, a*b);}else if(str[i] == '/'){int a, b;Pop(S, a);Pop(S, b);Push(S, b/a);}else if(str[i] == '+'){int a, b;Pop(S, a);Pop(S, b);Push(S, a+b);}else if(str[i] == '-'){int a, b;Pop(S, a);Pop(S, b);Push(S, b-a);}}printf("%d\n", getTop(S));return 0;}


阅读全文
0 0
原创粉丝点击