您的位置:首页 > 理论基础 > 数据结构算法

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

2016-08-05 10:16 183 查看


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



Time Limit: 1000MS Memory limit: 65536K


题目描述

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


输入

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


输出

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


示例输入

59*684/-3*+#



示例输出

57



提示

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

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define maxsize 10000

#define sizenum 10000

typedef struct

{

 int *base;

 int *top;

 int stsize;

}Sq;

int stack_Init(Sq*s)//?????§????

{

 s->base=(int *)malloc(maxsize*sizeof(int));

 if(!s->base)
exit(0);

 s->top=s->base;

 s->stsize=maxsize;

 return 1;

}

void push(Sq*s,char *e)

{

 if(s->top-s->base>s->stsize)

 {

   s->base=(int *)realloc(s->base,(s->stsize+sizenum)*sizeof(int));

   if(!s->base)
  exit(0);

   s->top=s->base+s->stsize;

   s->stsize+=sizenum;

 }

 *++s->top=*e-'0';

}

void choose(Sq*s,char a[])

{
int i,len=strlen(a);

 for(i=0;i<len;i++)

 {

  if(a[i]=='#')
 break;

  if(a[i]>='0'&&a[i]<='9')
 push(s,&a[i]);

  else

  {

   switch(a[i])

   {

   case'+':*(s->top-1)+=*(s->top);
  break;

   case'-':*(s->top-1)-=*(s->top);
  break;

   case'*':*(s->top-1)*=*(s->top);
  break;

   case'/':*(s->top-1)/=*(s->top);
  break;

   }

   s->top--;

  }

 }

 printf("%d\n",*(s->top));

}

int main()

{

 Sq s;

 char a[maxsize];

 gets(a);

 stack_Init(&s);

 choose(&s,a);

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: