首页 > 代码库 > 用堆栈实现算术运算
用堆栈实现算术运算
老感觉自己对算法技术不太过硬,今天开始多学学别人好的算法。
以下为一个博主的简单算法,摘录一下:
以下是算法运算的核心:
/*选择行列标*/
int ChooseIJ(char index)
{
int i;
switch(index)
{
case ‘+‘:
i=0;
break;
case ‘-‘:
i=1;
break;
case ‘*‘:
i=2;
break;
case ‘/‘:
i=3;
break;
case ‘(‘:
i=4;
break;
case ‘)‘:
i=5;
break;
case ‘#‘:
i=6;
}
return i;
}
/*判断运算符优先级*/
char Judge(char top, char ch)
{
static char order[][7]={
// + - * / ( ) #
/* + */ ‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘,
/* - */ ‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘,
/* * */ ‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘,
/* / */ ‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘,
/* ( */ ‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘=‘,‘ ‘,
/* ) */ ‘>‘,‘>‘,‘>‘,‘>‘,‘ ‘,‘>‘,‘>‘,
/* # */ ‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘ ‘,‘=‘
};
int i,j;
i = ChooseIJ(top);
j = ChooseIJ(ch);
return order[i][j];
}
switch(Judge(GetTop(&Ope), c))
{
case ‘<‘://栈顶运算符优先级低于当前操作符, 接收下一个字符
Push(&Ope, c);
c = getchar();
break;
case ‘=‘://当遇到右括号时 就出括号, 并接收下一个字符
Pop(&Ope);
c = getchar();
break;
case ‘>‘://栈顶的操作符优先级高 , 说明需要运算 , 并将计算结果压入操作数栈中
chOpe = Pop(&Ope);
a = Pop(&Num);
b = Pop(&Num);
Push(&Num, Operate(b,chOpe,a));
break;
}
请问有几个人能看懂其中的内容
用堆栈实现算术运算