c语言实现逆波兰表达式求值,编译无误,跑不出结果。

include <stdio.h>

include <stdlib.h>

include <ctype.h>

define STACK_INIT_SIZE 20

define STACKINCREMENT 10

define MAXBUFFER 10

typedef double ElemType;
typedef struct
{
ElemType* base;
ElemType* top;
int stackSize;
}sqStack;

void InitStack(sqStack* s)
{
s->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if (!s->base)
exit(0);
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}

void Push(sqStack* s, ElemType e)
{
//栈满,追加空间
if (s->top - s->base >= s->stackSize)
{
s->base = (ElemType*)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));
if (!s->base)
exit(0);
s->top = s->base + s->stackSize;
s->stackSize += STACKINCREMENT;
}
*(s->top) = e;
s->top++;
}

void Pop(sqStack* s, ElemType* e)
{
if (s->top = s->base)
return;

*e = *--(s->top);

}

int StackLen(sqStack s)
{
return (s.top - s.base);
}

int main(void)
{
sqStack s;
InitStack(&s);
char c;
char str[MAXBUFFER];
double d, e;
int i = 0;

printf("请按逆波兰表达式输入待计算数据,数据与运算符之间用空格隔开,以#为结束标志!\n");
scanf("%c", &c);
while (c != '#')
{
while (isdigit(c) || c == '.')
{
str[i++] = c;
str[i] = '\0';
if (i >= 10)
{
printf("\n输入数据过大!!!\n");
return -1;
}
scanf("%c", &c);
if (c == ' ')
{
d = atof(str);
Push(&s, d);
i = 0;
break;
}
}
switch (c)
{
case '+' :
Pop(&s, &e);
Pop(&s, &d);
Push(&s, d + e);
break;
case '-' :
Pop(&s, &e);
Pop(&s, &d);
Push(&s, d - e);
break;
case '*' :
Pop(&s, &e);
Pop(&s, &d);
Push(&s, d * e);
break;
case '/' :
Pop(&s, &e);
Pop(&s, &d);
if (e != 0)
{
Push(&s, d / e);
}
else
{
printf("\n输入数据有误!!!\n");
return -1;
}
break;
}
scanf("&c", &c);
}
double f;
Pop(&s, &f);
printf("\n最终结果为 :%f!!!\n", f);
return 0;

}

回答

虽然我不知道逆波兰表达式是啥,但肯定有一个错误,如下图所示:

case ']':
      if (s.top != s.base)
      {
        GetTop(s, e);
        if (e = '[')    //这里错了,改为 if (e == '[')
        {
          Pop(s, e);
          flag = 1;
        }
        else
          flag = 0;
      }
      else
        exit(0);
      break;

因为我不知道这个东西,如果你其他写的代码正确,那就应该没问题了。

提问建议:

  1. 请正确使用代码块功能,乱七八糟,影响体验。
  2. 遇到问题,你要明白的一个有力的工具,那就是调试。正确的调试方法基本能够解决所有问题。
以上是c语言实现逆波兰表达式求值,编译无误,跑不出结果。的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>