从键盘输入一个表达式,试编写算法计算表达式的值
如题,例如输入2+2*3输出 8
利用栈进行解决,定义两个栈一个存放数 一个存放运算符,这个表达式 的输入分别为 2 '+' 2 '*' 3 当输入第二个运算符 ‘*’时
取运算符栈顶元素进行判断,显然*高于+,这时就取数字栈的两个元素 2和3进行运算病吧结果6压入数字栈,再提取‘+’和数字
栈的两个元素2和6求出他们的和8并入栈,整个过程完成后把8出栈输出就行了,由于输入的是字符串,所以每次输入一个数据
就要输入一个空格代表该数据输入完毕最后以“#”代表表达式输入完毕
#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define ERROR 0
#define MAX 100
typedef struct SqStack1
{
char*top;
char*base;
int stacksize;
}SqStack1;
typedef struct SqStack2//数字栈结构体
{
double*top;
double*base;
int stacksize;
}SqStack2;
int InitStack(SqStack1 &S)//字符栈初始化
{
S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base) return ERROR;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int Push(SqStack1 &S,char e)//字符栈入栈
{
if((S.base-S.top)>S.stacksize)
{
S.base=(char*)realloc(S.base,
(STACKINCREMENT+S.stacksize)*sizeof(char));
S.top=S.base+S.stacksize;