真值表,主析取范式,主合取范式,栈,哈希表

利用栈对表达式求值

根据运算符的各运算符的优先顺序,确定入栈操作

  • if(compare(s2.top(),s[i])==-1)栈内的优先级小,栈外的运算符入栈
  • if(compare(s2.top(),s[i])==0)栈内的优先级与栈外的优先级相同,栈内运算符出栈
  • if(compare(s2.top(),s[i]==1)栈内优先级大,进行运算

判断优先级

以a为栈头,以b为栈外符号

  1. a=='!' 
  2. a=='&'
  3. a=='|'
  4. a=='-
  5. a=='='
  6. a=='(';

代码如图所示 (具体优先级)

if (a == '!')
	{
		if (b == '(')return -1;

		else if (b == '!')return 0;
		else return 1;
	}
	else if (a == '&')
	{
		if (b == '(' || b == '!')return -1;
		else return 1;
	}
	else if (a == '|')
	{
		if (b=='&'|| b == '(' || b == '!')return -1;
		else return 1;
	}
	else if (a == '-')
	{
		if (b=='&'|| b == '(' || b == '|' || b == '!')return -1;
		else return 1;
	}
	else if (a == '=')
	{
		if (b == '=' || b == ')')return 1;
		else return -1;
	}
	else if (a == '(')
	{
		if (b == ')')return 0;
		else return -1;
	}

表达式的运算(离散数学知识): 

int value(int a, char c, int b)
{
	if (c == '&')return a * b;
	if (c == '|')
	{
		if (a == 0 && b == 0)return 0;
		else return 1;
	}
	if (c == '-')
		if (a == 1 && b == 0)return 0;
		else return 1;
	if (c == '=')
	{
		if (a == b)return 1;
		else return 0;
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值