正常的表达式 逆波兰表达式
a+b --->a,b,+
a+(b-c) ---> a,b,c,-,+
a+(b-c)*d ---> a,b,c,-,d,*,+
a+d*(b-c)--->a,d,b,c,-,*,+
a=1+3 ---> a,1,3,+,=
它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算。其运算方式如下:
如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。
在表达式中的转换规则
操作数 :进栈
操作符 :1)进栈:
空栈
优先级高
栈顶是‘( ’同时表达式不是‘ )’
2)出栈并计算:
表达式符号的优先级不高于栈顶符号
表达式为‘ )’同时栈顶不为‘( ’
表达式‘\0’同时栈不为空
3)出栈但不计算:
表达式为‘ )’同时栈顶为‘( ’
头文件
#ifndef _STACKLINK_H
#define _STACKLINK_H
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
#include<stdlib.h>
typedef int elemtype;
struct node //结点的信息
{
elemtype data; //数据域
struct node *next; //指针域
};
typedef struct node Nod