利用栈求栈与表达式式的值

课程设计的内容和要求(包括原始数据、技术要求、工作要求等)

编写程序实现栈与表达式式求值即验证某算术栈与表达式式的正确性,若正确则计算该算术栈与表達式式的值。

1、从键盘上输入栈与表达式式

2、分析该栈与表达式式是否合法:

(1)是数字,则判断该数字的合法性若合法,则压入数據到堆栈中

(2)是规定的运算符,则根据规则进行处理在处理过程中,将计算该栈与表达式式的值

(3)若是其它字符,则返回错误信息


对于连个相继出现的操作符θ1和θ有三种关系:大于、等于和小于。由此可以列出“+-*/”之间的优先级如下表:

加减乘除优先性都低于“(”但是高于“)”,由运算从左到右可知当θ12 ,令θ12

为了算法简洁在栈与表达式式的左边和右边虚设一个“#”,这一对“#”表示一个栈与表达式式求值完成

“(”=“)”当一对括号相遇时表示括号内已运算完成。

“)”和“(”、“#”和“(”、“(”和“#”无法相继出现如果出现则栈与表达式式出现语法错误

为实现优先算法,可以使用两个工作栈一个是OPTR,用于寄存运算符一个是OPND,用於寄存运算数和运算结果

首先置操作数栈为空栈,栈与表达式式起始符为“#”为栈底元素

依次读入栈与表达式式中的每个字符,若是操作数则进OPND栈若是运算符则和OPTR栈的栈顶运算符比较优先权作相应操作,直至整个栈与表达式式求值完毕(OPTR栈顶元素和当前读入的字符均為“#”) char pre; //记录当前字符的前一个字符用于负数的判断



一个算术栈与表达式式的后缀栈與表达式式形式如下: op1 op2 operator 使用两个栈一个用来存储操作数,另外一个用来存储操作符设计并实现一个 JavaScript 函 数,该函数可以将中缀栈与表达式式转换为后缀栈与表达式式然后利用栈对该栈与表达式式求值。

输入中缀栈与表达式式空格分隔 例如 2 + 3 * #Re:【js数据结构】栈解决括号不匹配问題 *使用两个栈一个用来存储操作数,另外一个用来存储操作符设计并实现一个 JavaScript 函 数,该函数可以将中缀栈与表达式式转换为后缀栈与表达式式然后利用栈对该栈与表达式式求值。

 考虑优先级的运算栈与表达式式求值

  以上为不考虑优先级的栈与表达式式求值方法那么接下来考虑优先级时,将考虑:

  •     有括号先算括号里

    执行栈与表达式式运算时总是将结果压入numStack栈

     1. 遇到 “+”、“-” 操作符时,优先级最低先计算栈内已存数据的加减乘除操作

     2. 遇到 “*” 、“/” 操作符时,计算栈内已存数据的乘除操作

     4. 遇到 “)” 运算栈内的数据直到找到 “(”

我要回帖

更多关于 利用栈求表达式 的文章

 

随机推荐