日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

中缀表达式转换成后缀表达式

發(fā)布時(shí)間:2025/4/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中缀表达式转换成后缀表达式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

中綴表達(dá)式就是我們正常工作中寫(xiě)的表達(dá)式,如 a+(b-c)*d ,編譯系統(tǒng)將中綴表達(dá)式改寫(xiě) abc-d*+,這種運(yùn)算符在操作數(shù)后面稱為后綴表達(dá)式(也稱逆波蘭表達(dá)式)。

如何實(shí)現(xiàn)轉(zhuǎn)換的呢?這里做一下自己的理解及記錄。

利用棧來(lái)實(shí)現(xiàn)

轉(zhuǎn)換過(guò)程需要用到棧,這里用兩個(gè)棧,stack 棧用來(lái)存放運(yùn)算符,post 棧用來(lái)存放最后的后綴表達(dá)式。具體規(guī)則如下:

從左到右掃描中綴表達(dá)式,若是操作數(shù),直接存入 post 棧;

若是運(yùn)算符:
(1)該運(yùn)算符是左括號(hào) ( , 則直接存入 stack 棧。
(2)該運(yùn)算符是右括號(hào) ),則將 stack 棧中 ( 前的所有運(yùn)算符出棧,存入 post 棧。
(3)若該運(yùn)算符為非括號(hào),則將該運(yùn)算符和 stack 棧頂運(yùn)算符作比較:若高于棧頂運(yùn)算符,則直接存入 stack 棧,否則將棧頂運(yùn)算符出棧(從棧中彈出元素直到遇到發(fā)現(xiàn)更低優(yōu)先級(jí)的元素(或者棧為空)為止),存入 post 棧。
(4)當(dāng)掃描完后,stack 棧中還有運(yùn)算符時(shí),則將所有運(yùn)算符出棧,存入 post 棧。

例子:中綴表達(dá)式 a + b * c + (d * e + f) * g,其轉(zhuǎn)換成后綴表達(dá)式則為a b c * + d e * f + g * +。

掃描stack 棧post 棧
aa
a++a
a+b+ab
a+b*+*ab
a+b*c+*abc
a+b*c++abc*+
a+b*c+(+(abc*+
a+b*c+(d+(abc*+d
a+b*c+(d*+(*abc*+d
a+b*c+(d*e+(*abc*+de
a+b*c+(d*e++(+abc*+de*
a+b*c+(d*e+f+(+abc*+de*f
a+b*c+(d*e+f)+abc*+de*f+
a+b*c+(d*e+f)*+*abc*+de*f+
a+b*c+(d*e+f)*g+*abc*+de*f+g
a+b*c+(d*e+f)*g#abc*+de*f+g*+

注意:表格中第6步,讀到+,因?yàn)闂m斣?的優(yōu)先級(jí)高,所以*出棧,棧中下一個(gè)元素+優(yōu)先級(jí)與讀到的操作符+一樣,所以也要彈出。然后再將讀到的+壓入棧中。
第13步,讀到),則直接將棧中元素彈出直到遇到(為止。這里左括號(hào)前只有一個(gè)操作符+被彈出。

代碼實(shí)現(xiàn)

import java.util.Stack;public class InToPost {private Stack<Character> opStack;private Stack<Character> outStack;private String input;public InToPost(String in) {input = in;opStack = new Stack<Character>();outStack = new Stack<Character>();}public Stack<Character> doTrans() { //其他類型自行轉(zhuǎn)換for (int i = 0; i < input.length(); i++) {char ch = input.charAt(i);switch (ch) {case '+':case '-':operationOpStack(ch, 1);break;case '*':case '/':operationOpStack(ch, 2);break;case '(':opStack.push(ch);break;case ')':operationParen();break;default:outStack.push(ch);break;}}while (!opStack.isEmpty()) {outStack.push(opStack.pop());}return outStack;}public void operationOpStack(char opThis, int prec1) {//運(yùn)算符棧操作while (!opStack.isEmpty()) {char opTop = opStack.pop();if (opTop == '(') {opStack.push(opTop);}else {int prec2;if (opTop == '+' || opTop == '-')prec2 = 1;elseprec2 = 2;if (prec2 < prec1) {opStack.push(opTop);break;}elseoutStack.push(opTop);}}opStack.push(opThis);}public void operationParen() {while (!opStack.isEmpty()) {char c = opStack.pop();if (c == '(') break;elseoutStack.push(c);}}public static void main(String[] args) {String input = "1+2*4/5-7+3/6";InToPost theTrans = new InToPost(input);Stack<Character> output = theTrans.doTrans(); System.out.println("Postfix is " + output + '\n');} }

利用語(yǔ)法樹(shù)

先將中綴表達(dá)式用二叉樹(shù)表示出來(lái),再后序遍歷該二叉樹(shù),就得到其相應(yīng)的后綴表達(dá)式。

加括號(hào)法

加括號(hào)法先將中綴表達(dá)式每步要計(jì)算的表達(dá)式加上括號(hào),然后將每個(gè)運(yùn)算符移到其所在括號(hào)的外面,最后,從左到右去掉括號(hào)后就是后綴表達(dá)式。

例子: a+(b-c)*d

加括號(hào) (a+((b-c)*d))移運(yùn)算符 (a((bc)-d)*)+
去括號(hào) abc-d*+

后綴表達(dá)式求值

求值過(guò)程可用棧來(lái)輔助存儲(chǔ)。假定待求值的后綴表達(dá)式為:6 5 2 3 + 8 * + 3 + *,則其求值過(guò)程如下:

  • 遍歷表達(dá)式,遇到數(shù)字首先放入棧,此時(shí)棧如下 6 5 2 3
  • 接著讀到+,則彈出3和2,執(zhí)行3+2,將結(jié)果5壓棧 6 5 5
  • 讀到8,壓棧 6 5 5 8
  • 讀到 *, 彈出8和5,執(zhí)行8*5,將結(jié)果40壓棧 6 5 40
  • 讀到 +,彈出40和5,執(zhí)行40+5,將結(jié)果45壓棧 6 45
  • 讀到 3,壓棧 6 45 3
  • 讀到 +,彈出3和45,執(zhí)行3+45,將結(jié)果48壓棧 6 48
  • 讀到 *,彈出48和6,執(zhí)行48*6,將結(jié)果288壓棧 288
  • 最后結(jié)果288

總結(jié)

以上是生活随笔為你收集整理的中缀表达式转换成后缀表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青草精品 | 日本不卡久久 | 99热热| 波多野结衣一区 | 亚洲精品国产片 | 日韩va视频| 一级片久久 | 少妇精品久久久久久久久久 | 少妇情理伦片丰满午夜在线观看 | 国产精品一二三区 | 成人免费网视频 | 国产免费久久久 | 九九综合| 日韩人妻一区二区三区蜜桃视频 | 中文字幕一区二区三区在线不卡 | 精品一区在线 | 中文字幕一区二区三区人妻电影 | 日韩欧洲亚洲 | 狠狠干av | 久久久精品在线 | 超碰女| 91视频麻豆| 亚洲国产日韩a在线播放性色 | 波多野结衣视频网站 | 亚洲高清资源 | 九九看片 | 污视频网站入口 | 激情久久免费视频 | www.久久精品 | 免费网站在线观看人数在哪动漫 | 欧美性日韩 | 成人欧美一区二区三区黑人动态图 | 精品一区二区久久 | 色诱av | 日本理论中文字幕 | 99视频在线精品 | 日本免费无人高清 | 亚洲图片在线视频 | 日本免费高清一区二区 | 午夜播放 | 色男人在线| 男女网站视频 | 一级黄色大片网站 | 日韩三级大片 | 亚洲偷偷 | 久久99深爱久久99精品 | 日韩视频免费观看高清完整版在线观看 | 日本激情一区二区三区 | japansexxxxhd医生 夜夜操导航 | 8x8ⅹ国产精品一区二区二区 | 色播日韩 | 三级小视频在线观看 | 天天爽夜夜爽夜夜爽精品 | 成人福利在线观看 | 97人妻精品一区二区三区动漫 | 免费av电影网址 | a级片黄色| 91成人在线观看国产 | 国产特级片 | 国产成人精品国内自产拍免费看 | 三年大全国语中文版免费播放 | 一区二区三区高清 | 免费在线黄色网 | 91在线免费视频 | 岛国精品资源网站 | 亚洲第一视频在线播放 | 久久黄网站 | 色戒在线免费 | 少妇xxxx| 性猛交xxxx乱大交孕妇2十 | 日本视频不卡 | 女女同性被吸乳羞羞 | 亚洲欧美日韩国产综合 | 欧美xxxx18 | 欧美精彩视频 | 欧洲亚洲国产精品 | 成人免费a级片 | 狠狠干综合 | 精品熟女一区 | 欧美日韩在线免费观看视频 | 欧美被狂躁喷白浆精品 | 高清毛片aaaaaaaaa片 | 国产内射一区二区 | 亚洲作爱 | 国产成人精品二区三区亚瑟 | 日欧视频| 国产一区麻豆 | 亚洲乱码视频在线观看 | 香蕉视频久久久 | 五月天丁香社区 | 午夜欧美激情 | 久草这里只有精品 | 国产精品久久久久久久9999 | 欧亚毛片| 特黄aaaaaaa片免费视频 | 最新黄网 | 日本女人毛茸茸 | 日本网站在线免费观看 | 日本黄色片免费看 |