欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2024/8/23 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 数据结构实验之栈三:后缀式求值 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述

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

输入

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

输出

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

示例输入

59*684/-3*+#

示例输出

57




#include <stdio.h>
#include<stdlib.h>
#define maxstack 1000
#define stacknum 1000
typedef struct
{
    int *top,*base;
    int stacksize;
}stack;
void Initstack(stack &s)//栈的初始化;
{
    s.base=(int *)malloc(maxstack*sizeof(int));
    if(!s.base) exit(0);//栈溢出;
    s.top=s.base;
    s.stacksize=maxstack;
}
void push(stack &s,char e)//进栈;
{
    if(s.top-s.base>=s.stacksize)
    {
        s.base=(int *)realloc(s.base,(maxstack+stacknum)*sizeof(int));
        if(!s.base) exit(0);//栈溢出;
        s.top=s.base+s.stacksize;
        s.stacksize+=stacknum;
    }
    s.top++;//栈顶元素为e;
    *s.top=e;
}
int Empty(stack &s)//判断是否为空栈;
{
    if(s.base==s.top)
        return 1;
        return 0;


}
void Pop(stack &s)//出栈;
{
    if(!Empty(s))
        s.top--;


}
void print(stack &s)
{//、栈内元素的输出;
    while(s.top!=s.base)
    {
        printf("%c",*s.top);
        Pop(s);
    }
    printf("\n");
}
void cal(stack &s,char st[],int n)//由栈的后缀式求值
{
    int i,pr,la;
    int ch;
    for(i=1;i<=n;i++)
    {
        if(st[i]>='1'&&st[i]<='9')//数字进栈;
        {
            ch=(st[i]-'0');
            push(s,ch);
        }
        else if(st[i]=='+')//+号栈内两个数出栈计算再进栈;
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=pr+la;
        }
        else if(st[i]=='*')
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=pr*la;
        }
        else if(st[i]=='-')
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=la-pr;
        }
        else if(st[i]=='/')
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=la/pr;
        }
    }
    printf("%d\n",*s.top);
}
int main()
{
    char ch,st[10000];
    int i=0;
    stack s;//栈的定义
    Initstack(s);//栈的初始化;
    while(~scanf("%c",&ch))
    {
        if(ch!='#')
            {
                  i++;
                  st[i]=ch;
            }
         else
                break;
    }
    cal(s,st,i);
    return 0;
}

总结

以上是生活随笔为你收集整理的数据结构实验之栈三:后缀式求值的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。