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

来源:互联网 发布:林书豪16赛季数据 编辑:程序博客网 时间:2024/06/10 09:46

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

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

Problem Description

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

Input

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

Output

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

Example Input

59*684/-3*+#

Example Output

57

Hint

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

Author

#include <iostream>
#include<stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
#define maxsize 10000
#define numsize 10000
typedef int element;
typedef int status;
typedef struct
{
    element *top;
    element *base;
    int stacksize;
}sqstack;
status initstack(sqstack &s)
{
    s.base=(element *)malloc(maxsize * sizeof(element));
    if(!s.base)return -1;
    s.top=s.base;
    s.stacksize=maxsize;
    return 0;
}
void clearstack(sqstack &s)
{
    s.top=s.base;
}
void push(sqstack &s,element e)
{
    if(s.top-s.base>=s.stacksize)
    {
        s.base=(element *)realloc(s.base,maxsize+numsize*sizeof(element));
        s.top=s.base+maxsize;
        s.stacksize+=numsize;
    }
    *(s.top)=e;
    s.top++;
}
void pop(sqstack &s)
{
    s.top--;
}
element get(sqstack &s)
{
    element e;
    e=*(s.top-1);
    s.top--;
    return e;
}
status emptystack(sqstack &s)
{
    if(s.base==s.top)
        return 1;
    else
        return 0;
}
void putstack(sqstack &s)
{
    while(s.top>s.base)
    {
        printf("%d",*(s.top-1));
        s.top--;
    }
}
void suan(sqstack &s,element c)
{
    int sum=0;
    if(c<='9'&&c>='0')
        push(s,c-48);
    else
    {
        if(c=='*')
        {
          int a,b;sum=0;
            a=*(s.top-1);
            s.top--;
            b=*(s.top-1);
            s.top--;
          sum=b*a;
          push(s,sum);
        }
        if(c=='+')
        {
         int a,b;sum=0;
            a=*(s.top-1);
            s.top--;
            b=*(s.top-1);
            s.top--;
          sum=a+b;
          push(s,sum);
        }
        if(c=='-')
        {
            int a,b;sum=0;
            a=*(s.top-1);
            s.top--;
            b=*(s.top-1);
            s.top--;
            sum=b-a;
          push(s,sum);
        }
        if(c=='/')
        {
            int a,b;sum=0;
            a=*(s.top-1);
            s.top--;
            b=*(s.top-1);
            s.top--;
            sum=b/a;
          push(s,sum);
        }
    }
}
int main()
{
    sqstack s;
    initstack(s);
    char c;
    while(~scanf("%c",&c)&&c!='#')
    {
        suan(s,c);
    }
    printf("%d\n",*(s.top-1));
    return 0;
}


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