用两种方式实现表达式自动计算
二:将用户所输入的中缀表达式直接进行计算。
第一种算法:
这种算法又可分为两步:
第一步:将用户输入的中缀表达式先转换成后缀表达式:在这一步中,首先要
建立一个符号栈,和一个字符串数组,接着读用户输入的字符,如果用户输入的
是数字、+、—、*、/、%、(、)以外的字符,则程序报错。如果读到的是数字
或小数点,则直接放入字符串数组。如果读到的是符号,则与符号栈栈顶的元素
的优先级进行比较,如果当前读入的符号的优先级高,则直接入栈,如果当前符
号的优先级低于栈顶元素的优先级,那么将栈顶元素弹出,并将其放入字符串数
组中,如果读到的是左括号,则直接入栈,并将当前符号与栈中栈顶的下一个元
素进行对比。如果读到的是右括号,则观察栈顶元素,如果栈顶不为左括号或空,
则将符号存入字符串数组中,如果遇到左括号,则弹出左括号,如果栈为空,则
结束。如此循环,直到遇到’\0’结束,最终字符串数组中的表达式为后缀表达式。
第二步:对后缀表达式进行计算:在这一步中,首先要建立一个数值栈,对字
符串数组中的字符进行读取,当读取到数值时,将数值放入数值栈中,如果读到
符号,则将弹出栈中的两个数字进行计算,在将计算结果放入数值栈中,最后栈
中留下的结构就是表达式最后的结果。
第二种算法:
在此算法中要定义两个栈,一个叫数值栈,一个叫符号栈,将用户输入的字
符逐个进行扫描,如果用户输入的是数字、+、—、*、/、%、(、)以外的字符
则程序报错。如果是数字或小数点,则放入数值栈中,如果是符号,则先将此符
号的优先级与符号栈的栈顶元素的优先级做比较,如果当前读到的符号的优先级
比符号栈栈顶元素的优先级高,则此符号入栈。如果此符号优先级低,则将栈顶
元素出栈,然后从数值栈中弹出两个元素,将这两个元素进行计算,计算结果继
续压入到数值栈中,而将当前读到的符号继续与符号栈中的下一个栈顶元素比较,
如此循环,直到符号栈中栈顶元素的优先级小于或等于当前符号的优先级,则将
当前符号压入符号栈中,如果读到的是左括号,则直接放入符号栈中,如果读到
的是右括号,则从符号栈中弹出一个符号,从数值栈中弹出两个数字,然后将计
算结果放入数值栈中,如此循环操作,如果遇到左括号,则停止,并释放左括号。
接着读取下一个字符,读取结束时,计算结果就放在数值栈中,从而将数值栈中
的元素弹出即为所求结果。
二、算法流程图
第一个算法的流程图:
- 3 -
评论0