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

来源:互联网 发布:北海道自由行 知乎 编辑:程序博客网 时间:2024/06/10 11:30

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

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

Problem Description

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

Input

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

Output

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

Example Input

59*684/-3*+#

Example Output

57

Hint

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

代码如下:

#include<bits/stdc++.h>typedef int elemtype;typedef int status;#define MAXSIZE 100#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,(MAXSIZE+S.stacksize)*sizeof(elemtype));        S.top = S.base + S.stacksize;        S.stacksize += MAXSIZE;    }    *S.top++ = e;}int Pop(Sqstack &S, elemtype &e){    if(S.top == S.base) return false;    return e = * --S.top;}int main(){    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;}


原创粉丝点击