码迷,mamicode.com
首页 > 其他好文 > 详细

用堆栈实现算术运算

时间:2017-03-08 10:43:38      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:今天   字符   pop   case   运算符优先级   需要   rate   运算符   个人   

老感觉自己对算法技术不太过硬,今天开始多学学别人好的算法。

以下为一个博主的简单算法,摘录一下:

以下是算法运算的核心:

 

/*选择行列标*/
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;
}

 

 

请问有几个人能看懂其中的内容

用堆栈实现算术运算

标签:今天   字符   pop   case   运算符优先级   需要   rate   运算符   个人   

原文地址:http://www.cnblogs.com/alexhg/p/6517968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!