应用栈实现表达式求值,具体思路如下:
创建两个栈,一个用来存数字,一个用来存符号。起始,数字栈为空,符号栈底先存一个’\n’用来标记开始,用输入的’\n’标记结尾。
开始处理输入的字符,当字符是运算符号时,根据运算符的优先关系:如果当前符号优先关系大于栈顶符号,入栈;如果小于,则拿出栈顶符号,再从数字栈拿出两个数字进行运算,将结果放在数字栈里;如果等于,说明是两个括号相遇,此时括号内的运算已经完成,将括号脱栈。
- 遇到用户输入的回车符结束运算,并从数字栈里拿出运算结果。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define STACKMAX 100
#define STACKADD 10
/**********************************符号栈****************************/
typedef struct StackChar
{
char *base;
char *top;
int stacksize;
}SC;
void InitStackSC(SC *S)
{
S->base = (char*)malloc(STACKMAX*sizeof(char));
S->top = S->base;
S->stacksize = STACKMAX;
}
void PushSC(SC *S,char e)
{
if(S->top - S->base >= S->stacksize)
{
S->base = (char*)realloc(S->base,(S->stacksize+STACKADD)*sizeof(char));
if(!S->base)
return;
S->top = S->base + S->stacksize;
S->stacksize += STACKADD;
}
*S->top++ = e;
}
int StackEmptySC(SC* S)
{
if(S->base == S->top)
return 1;
return 0;
}
void PopSC(SC *S,char *e)
{
*e = *--S->top;
}
char GetTopSC(SC *S)
{