一个标识的作用。也就是说,用户的输入必须以‘#’作为结束。
为实现上述程序功能,选择栈用于存储运算符与运算数,分别用两个栈 oprt(字符
栈)和 num(数字栈)来存储。首先在 oprt 栈中压入一个‘#’,用以提示程序表达式的边
界。从终端读取数据:
① 如果读到的是数字字符,那么表明现在正在输入的是运算数。为了得到完整的数字 ,
先将这些数字字符按顺序存储到缓冲区(temp 栈),直到读到运算符时,将缓冲区的数字
按照权重相加,构造出完整的运算数,压入运算数栈中去,同时清空 temp 栈。
② 如果读到的是运算符,那么按照规则比较 oprt 栈顶运算符和此运算符的优先级:
(下列三种情况)
a.oprt 栈顶运算符高于此运算符,则表明此时已经可以进行计算。将 num 栈依次出
栈两个元素 A,B,则由 B、oprt 栈顶运算符、A 构成了一个简单的表达式,对之进行计算,
将结果压入 num 栈。
b.oprt 栈顶运算符低于此运算符,则先将这个运算符入栈,然后继续读取。
c.oprt 栈顶运算符优先级等于此运算符,例如左右括号匹配时、表达式头‘#’和尾‘#’
匹配时,则不将此运算符入栈,反而将 oprt 栈顶运算符出栈。
重复上述①②操作,直到 oprt 栈顶元素为‘#’或读取到的字符为‘#’(结束)。此时 num
栈顶元素即为此表达式的结果。
运算符之间的优先级关系:
评论16
最新资源