一个关于优先级的问题!

zhangnanjun211 2002-09-25 07:25:41
最近我在进行数据结构课程设计时我写了如下一个关于算术表达式的运算符的堆栈:
int order(char operator)
{
switch(operator)
{
case '+' :
case '-' :
return 1;
case '*' :
case '/' :
return 2;
}
}
此表达式用纯c语言编写在turboc2.0下进行不带括号的表达式计算时毫无问题,而课程设计要求能够进行带括号的表达式计算。但是清华大学出版的由严蔚敏和吴伟民老师编著的c语言版的数据结构里的有关优先级的关系如下:
————————————————————————
\ |
\ m2| + - * / ( ) #
m1\ |
\ |
----------------------------------------------
+ | > > < < < > >
- | > > < < < > >
* | > > > > < > >
/ | > > > > < > >
( | < < < < < =
) | > > > > > >
# | < < < < < =
----------------------------------------------
也就是说任意两个相继出现的算符m1和m2的优先关系至多是下面三种关系之一:
m1<m2 m1的优先权低于m2
m1=m2 m1的优先权等于m2
m1>m2 m1的优先权高于m2
但是此表中的“(”和“)”的优先关系我始终无法用表达式表示出来。
希望高人能在我的表达式中完成“(”和“)”的优先级的判断。
...全文
54 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhgary 2002-09-25
  • 打赏
  • 举报
回复
说的很对,我做过了,有代码,你要可以给你,不过要给我分的哦。
遇到(无条件入栈,遇到)则无条件弹出栈内元素,一直弹出到一个(为止。
如果全部弹完了还没有碰到(那就是表达式错误哦。给分啊
blh 2002-09-25
  • 打赏
  • 举报
回复
遇到(必须入栈,遇到)必须出栈,直到(出栈
zhangnanjun211 2002-09-25
  • 打赏
  • 举报
回复
假如输入此表达式的情况如何?
9999/99-(32*2+(3-(9999/99)/101))
shdiao 2002-09-25
  • 打赏
  • 举报
回复
你是不是要判断优先级然后入栈?那就“(” 在 栈外优先级最高,所以在栈外就一定入栈,但在栈内优先级最低“)”和“(”真好相反,在栈外最低,入栈后最高,
然后根据优先级出栈,“(”“)”在堆栈的内外优先级有变化,我是这个意思
zhangnanjun211 2002-09-25
  • 打赏
  • 举报
回复
能否表达在我的程序段中,如果运行成功的话,我再送100分!
shdiao 2002-09-25
  • 打赏
  • 举报
回复
“(” 在 栈外优先级最高,所以在栈外就一定入栈,但在栈内优先级最低
“)”和“(”真好相反,在栈外最低,入栈后最高
sjd163 2002-09-25
  • 打赏
  • 举报
回复
没有研究
此种表达方式不如排队直观,但其小巧用熟了可能就好了。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧