您现在的位置: > 环球 > 环球博览 > 正文

c# 使用后缀表臻式 计算多项式

2018-09-23 08:50  来源:未知   字号:T | T

  原本父亲壹的时分在ACM的时分学数据构造的时分学度过多项式计算 ?阿谁时分用的C言语 ?,事先觉先觉得好骈杂,,父亲条约盘桓度过将近壹周 邑没拥有拥有啃上,后头也就僵持了,,当今念书C#的win form 想写度过计算器到来练习 练习,,这么效实到来了 多项式计算肿么办,, 因此此雕刻次又花了壹个周的时间 从了松后缀表臻式末了尾壹直到撸代码,,效实感还是蛮父亲的,,,芜词完一齐,进入本题:

  父亲致文思:

  将中缀表臻式 转为后缀表臻式 用到两个栈,壹个栈管 数字(此雕刻个栈我定义的 private Stack Opnumber=new Stack()) 还拥有壹个标记栈(private Stack opre=new Stack();)

  然后遍历壹个string的字符串?

  (1)假设是数字 就入数字栈?

  (2)假设是标记 就比较 标记栈栈顶的运算符的优先级与此雕刻个标记的优先级

  ? ?1) ?假设栈顶的优先级父亲于容许等于以后的 运算符优先级 就将 栈顶的运算符 弹出产到来 同时 数字栈也弹两个数字 与此雕刻个运算符终止计算 然后将计算结实入数字栈

  ? ? 2)假设栈顶的优先级小于于以后的 运算符优先级 就直接将此雕刻个运算符压入标记栈

  (3)假设是'(' 直接压标记栈

  (4)假设是')' 这么出产栈标记栈 直到遇到'(' ,同时出产壹个标记的时分 从数字栈出产栈两个数字 同时计算 然后将结实压栈数字栈

  (5)最末将所拥局部标记栈的标记出产栈 每出产栈壹个标记 出产栈两个数字 计算 结算结实压入数字栈.

  (6)最末在不考虑特殊情景的情景下 弹出产数字栈的但剩的壹个数字 也坚硬是终极的结实

  尽结: 父亲致文思坚硬是此雕刻个样儿子 不外面还拥有很多特殊情景要处理:

  1,末了尾遍历之前 先处理此雕刻个表臻式 看拥有没拥有拥有不符格的字符

  2,假设是壹个正数 这么标记就会出产效实(标记度过多) 因此 遇到数字是正数的时分就 压栈数字栈壹个0,

  ?1),什么情景下是壹个正数呢 ?,表臻式第壹个标记是- ,还拥有壹个左括号之后紧接着是壹个-的情景下 需寻求数字栈压栈0

  3,还拥有取数字的时分 剩意就续的数字和. 处理为壹个数字 不要瓜分了(天然我的容错才干拥有限 譬如 壹个数字外面面拥有两个小数点 没拥有拥有处理)

  4,出产栈的时分剩意判佩 栈能否曾经为空

  //,此雕刻个是壹周前写的了 能还拥有数细回想不宗到来了,,乐当着父亲家在评论外面面 提讯问,批,!!

  接上是我写的参考代码:

  (bug是拥局部 不外面效实不太父亲 还拥有坚硬是容错才干拥有限,,乐当着修改)

更多