#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100//定义链表最大容量
#define YICHUHOU 10//如果溢出增加的内存
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct Stack
{
int* top;
int* base;
int capacity;
}SqStack;
Status Initstack(SqStack* S)
{
S->base = (int*)malloc(MAXSIZE * sizeof(int));
if (!S->base) exit(OVERFLOW);
S->top = S->base;
S->capacity = MAXSIZE;
return OK;
}
Status Push(SqStack* S, ElemType e)
{
if (S->top - S->base >= S->capacity)
{
S->base = (int*)realloc(S->base, (YICHUHOU + S->capacity) * (sizeof(int)));
if (!S->base) exit(OVERFLOW);
S->top = S->base + S->capacity;
S->capacity += YICHUHOU;
}
*S->top = e;
S->top++;
return OK;
}
Status Pop(SqStack* S, ElemType& e)
{
if (S->top == S->base)return ERROR;
--S->top;
e = *S->top;
return OK;
}
Status Gettop(SqStack* S, ElemType& e)
{
if (S->top == S->base)return ERROR;
e = *(S->top - 1);
return e;
}
int Operator(int a, char ch,int b)
{
int c;
switch (ch)
{
case '*':
c = a * b;
break;
case '-':
c = b-a;
break;
case '+':
c = b + a;
break;
case '/':
c = b / a;
break;
default:
break;
}
return c;
}
int main()
{
SqStack S;
Initstack(&S);
char m;
scanf("%c", &m);
while (m != '#')
{
while (m >= '0' && m <= '9')
{
m = m - '0';
Push(&S, m);
scanf("%c", &m);
if (m == ' ' || m == '#')
break;
}
if(m=='+'||m=='-'||m=='/'||m=='*')
{
int a,b;
int z;
Pop(&S, a);
Pop(&S, b);
z=Operator(a, m, b);
Push(&S, z);
}
scanf("%c", &m);
}
int e;
Pop(&S, e);
printf("%d", e);
return 0;
}
后缀表达式求值
最新推荐文章于 2023-09-19 21:52:00 发布