数据结构07:栈的应用(表达式求值)

摘要:表达式求值是对栈的一个进阶应用,巧妙地运用了栈的特性,创建了两个栈,一个存放数值,一个存放运算符。看懂这个代码,我们就会对栈的理解更进一步。

实际是这个代码是不好写的,我参考了教材相关内容及其他同学的代码后,才理解并写出以下代码。

由于栈的基本操作等已经在前文说过,这里先只展示有关表达式求值的函数
一.代码块
1)判断优先级函数

char priority(char ch1,char ch2)
{
   
	//对于优先级的判定,我在书上找到了一个表。对此用二位数组实现比较方便
	
	//书上是添加一个#号代表表达式结束,这里可以用=号方便理解 
	int i,j;
	char pri[7][7] = 
	{
   //   +   -   *   /   (   )   =
		{
   '>','>','<','<','<','>','>'},
		{
   '>','>','<','<','<','>','>'},
		{
   '>','>','>','>','<','>','>'},
		{
   '>','>','>','>','<','>','>'},
		{
   '<','<','<','<','<','=','\0'},
		{
   '>','>','>','>','\0','>','>'},
		{
   '<','<','<','<','<','\0','='},
	};
	
	switch (ch1)
	{
   
		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;
			break;			
	}
	
	switch (ch2)
	{
   
		case '+':
			j = 0;
			break;
		case '-':
			j = 1;
			break;
		case '*':
			j = 2;
			break;	
		case '/':
			j = 3;
			break;	
		case '(':
			j = 4;
			break;
		case ')':
			j = 5;
			break;
		case '=':
			j = 6;
			break;			
	}
	
	return pri[i][j];
}

2)判断字符是否为数字

int isDigit(char ch)
{
   
	if(ch >= '0' && ch <= '9')
	{
   
		return 1;
	}
	return 0;
}

3)判断是否为运算符

int isOperator(char ch)
{
   
	switch (ch)
	{
   
		case '+':
		case '-':
		case '*':
		case '/':
		case '(':
		case ')':
		case '=':
			return 1;
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值