日韩性视频-久久久蜜桃-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国产精品久久久久久久成人热 | 女人脱下裤子让男人桶 | 一边顶弄一边接吻 | 国语av在线| 一区不卡视频 | 奇米一区 | 在线观看国产黄色 | 麻豆自拍视频 | 免费成人深夜 | 日韩视频在线免费播放 | 色综合久久综合 | 国产乱叫456在线 | 人妻饥渴偷公乱中文字幕 | 亚洲视频免费 | 日韩精品123 | 18成人在线 | 久久国产精品99久久人人澡 | 亚洲色图导航 | 中文久久久久 | 日韩性生交大片免费看 | 欧美一级性生活 | 欧美国产成人在线 | 麻豆传媒一区二区三区 | 国产91在线高潮白浆在线观看 | 国产一级片a | 亚洲免费国产 | 国产原创视频 | 日韩精品av一区二区三区 | 国产在线无码精品 | av美女在线观看 | 亚洲美女性生活 | 色欲狠狠躁天天躁无码中文字幕 | 亚洲视频福利 | 亚洲九色 | 色网址在线 | 久久久性视频 | 日韩中文字幕在线不卡 | 日本亚洲一区二区 | 真实的国产乱xxxx在线91 | 久久一区二区三区四区五区 | 九色91在线 | 久久一线 | 男人插入女人阴道视频 | 精品视频一区二区 | 极品白嫩的小少妇 | 国产精品伦一区二区三区 | 在厨房拨开内裤进入毛片 | av网站免费在线观看 | 极品五月天 | 免费毛毛片 | 在线观看日本 | 91亚色 | 欧美91成人网 | 亚洲中文字幕无码一区 | 91在线视频 | 日韩第一页 | www.av视频在线观看 | 亚洲一区二区三区在线视频观看 | 黄黄视频在线观看 | 国产成人在线观看免费网站 | 日韩欧美毛片 | 欧美丰满少妇 | 在线免费视频一区二区 | 久久咪咪| 精品欧美视频 | 国产青青草在线 | 女人扒开腿让男人捅爽 | 国产精品香蕉在线观看 | 91精品一区二区三区在线观看 | 亚洲精品成人在线 | 欧美激情小视频 | a√国产 | 二区国产 | 色呦呦在线免费观看 | 日韩一卡二卡在线 | 中国一级特黄毛片 | 人成网站在线观看 | 欧美a∨ | 毛片直接看 | 黄色欧美在线观看 | 亚洲综合二区 | 黄色一级片在线免费观看 | 欧美性极品少妇xxxx | 日一区二区三区 | 裸体一区二区三区 | 18深夜在线观看免费视频 | 国产在线观看免费播放 | 韩国伦理片在线看 | 98视频在线 | 青青草手机视频在线观看 | 亚洲一区二区三区四区av | 狠狠操网址 | 五月婷久久 | 国产亚洲系列 | 欧美激情一区二区三区免费观看 | 裸体裸乳免费看 | 国产又爽又猛又粗的视频a片 | 欧美日韩国产一级 |