有一句计算机界中的至理名言:
程序=数据结构+算法
可见数据结构是多么地重要啊......呵呵
今天开始复习了一下数据结构 , 解决了以前的一个问题:
用栈这个数据结构实现四则运算
算法思想是借鉴了<>(清华大学出版社 严蔚敏)中的一些思想 , 最原始的算法就是波兰一位逻辑学家的逆波兰表示法
也就是讲中缀表达式转为后缀表达式的算法 , 感觉很强大 , 呵呵......
好了F话就不多说了 , 直接上代码吧()
算法核心代码:
/*算术表达式求值算法*/
int CountExpression()
{
LinkStack Ope, Num;//操作符栈和操作数栈
char a,b,c,chOpe;
InitStack(&Ope);//初始化符号栈
Push(&Ope, '#');//因为输入中包含# 于是先压一个# 用于判断是否结束
InitStack(&Num);//初始化操作数栈
c = getchar();
//读取遇到#或操作符栈顶为# 就表示结束运算
while(c != '#' || GetTop(&Ope) != '#')
{
//如果是操作数(小于10的一位数) 就压入操作数栈
if(c>= '0' && c<= '9')
{
Push(&Num, c);
c = getchar();
}
//压入操作符栈
else
{
switch(Judge(GetTop(&Ope), c))
{
case '
Push(&Ope, c);
c = getchar();
break;
case '='://当遇到右括号时 就出括号, 并接收下一个字符
Pop(&Ope);
c = getchar();
break;
case '>'://栈顶的操作符优先级高 , 说明需要运算 , 并将计算结果压入操作数栈中
chOpe = Pop(&O