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

来源:互联网 发布:mac键盘坏了怎么办 编辑:程序博客网 时间:2024/05/23 01:58

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

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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

输入

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

输出

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

示例输入

59*684/-3*+#

示例输出

57

提示

基本操作数都是一位正整数!
#include<iostream>#include<cstdlib>#include<string>#define STACK_INIT_SIZE 100  //存储空间初始分配量#define STACKINCREMENT 10    //存储空间分配增量using namespace std;typedef struct{    int *base; //在栈构造之前和销毁之后,base的值为NULL    int *top;  //栈顶指针    int stacksize;//当前已分配的存储空间,以元素为单位}SqStack;SqStack S;int InitStack(SqStack &s)//构造一个空栈{    s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int ));    if(!s.base) //存储分配失败        exit(0);    s.top=s.base;    s.stacksize = STACK_INIT_SIZE;    return 1;}int Push(SqStack &s,int e)//压栈,插入元素e为新的栈顶元素{    if(s.top-s.base>s.stacksize) //栈满,追加存储空间    {        s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int ));        if(!s.base)//存储分配失败            exit(0);        s.top=s.base+s.stacksize;        s.stacksize+=STACKINCREMENT;    }    *s.top++=e;    return 1;}int Pop(SqStack &s,int &e)//出栈,若栈不空,删除栈顶元素,用e返回其值{    if(s.top==s.base)        return 0;        e=*--s.top;        return 1;}int StackEmpty(SqStack s)//判空{    if(s.base==s.top)        return true;    else        return false;}int GetTop(SqStack S,int &e){    if(S.base==S.top)        return 0;    e=*(S.top-1);    return 1;}int main(){    int x,etop,epop;    int result;    int value1=0,value2=0;    string str;    cin>>str;    int i=0;    InitStack(S);    while(str[i]!='#')    {        if(str[i]>='0'&&str[i]<='9')        {            x=str[i]-'0';//将字符型转为整型            Push(S,x);        }        else if(!StackEmpty(S))        {            if(str[i]=='+')//作‘+’运算            {                Pop(S,epop);//弹出栈顶元素                value2=epop;//获取第一个值                Pop(S,epop);//再弹出栈顶元素                value1=epop;//获取第二个值                result=value1+value2;                Push(S,result);//结果进栈            }            if(str[i]=='-')            {                Pop(S,epop);                value2=epop;                Pop(S,epop);                value1=epop;                result=value1-value2;                Push(S,result);            }            if(str[i]=='*')            {                Pop(S,epop);                value2=epop;                Pop(S,epop);                value1=epop;                result=value1*value2;                Push(S,result);            }            if(str[i]=='/')            {                Pop(S,epop);                value2=epop;                Pop(S,epop);                value1=epop;                result=value1/value2;                Push(S,result);            }        }        else{}        i++;    }    GetTop(S,etop);//获取栈顶元素并输出结果    cout<<etop<<endl;    return 0;}


 
0 0
原创粉丝点击