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

来源:互联网 发布:人工智能 医学 编辑:程序博客网 时间:2024/05/20 08:24

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

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description

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

Input

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

Output

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

Example Input

59*684/-3*+#

Example Output

57

Hint

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


该题较为简单,只需建立一个数字栈,存储输入的数字,当输入运算符时,进行相应操作即可

#include<iostream>#include<stdlib.h>#define OK 1#define ERROR 0#define OVERFLOW -1#define STACK_INT_SIZE 50#define STACKINCREMENT 50using namespace std;typedef int status;typedef struct{    int *base;    int *top;    int stacksize;}Sqstack;status init(Sqstack &S);status push(Sqstack &S, int e);int main(){    char s[1000];//以字符串形式读入    Sqstack S;    init(S);    cin >> s;    for(int i = 0; s[i] != '#'; i++)    {        if(s[i] >= '0' && s[i] <= '9')            push(S, s[i]-'0');//字符型转化为整型        else if(s[i] == '+')        {            *(S.top-2) = *(S.top-2) + *(S.top-1);//将栈中存放的两个数据相加放到离栈底近的那个            S.top--;//删除靠近栈顶的        }        else if(s[i] == '-')        {            *(S.top-2) = *(S.top-2) - *(S.top-1);//下列操作同理            S.top--;        }        else if(s[i] == '*')        {            *(S.top-2) = *(S.top-2) * *(S.top-1);            S.top--;        }        else if(s[i] == '/')        {            *(S.top-2) = *(S.top-2) / *(S.top-1);            S.top--;        }    }    cout << *--S.top;    return 0;}status init(Sqstack &S){    S.base = (int *)malloc(STACK_INT_SIZE * sizeof(int));    if(!S.base)        exit(OVERFLOW);    S.top = S.base;    S.stacksize = STACK_INT_SIZE;    return OK;}status push(Sqstack &S, int e){    if(S.top - S.base >= S.stacksize)    {        S.base = (int *)realloc(S.base, (S.stacksize+STACKINCREMENT)                                *sizeof(int));        if(!S.base)            exit(OVERFLOW);        S.top = S.base+S.stacksize;        S.stacksize += STACKINCREMENT;    }    *S.top++ = e;    return OK;}/***************************************************User name: jk160612王兆祚Result: AcceptedTake time: 0msTake Memory: 228KBSubmit time: 2017-10-14 16:53:43****************************************************/
阅读全文
0 0
原创粉丝点击