精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java編程內功-數據結構與算法「前綴,中綴,后綴」

開發 后端 算法
本篇繼續給大家介紹關于Java編程的相關知識,今天主要介紹數據結構與算法「前綴,中綴,后綴」,希望能夠幫助到你!

[[387421]]

 前綴表達式(波蘭表達式)

前綴表達式又稱波蘭表達式,前綴表達式的運算符位于操作符之前,如(3+4)*5-6對應的前綴表達式就是- * + 3 4 5 6

前綴表達式的計算機求值

從右至左掃描表達式,遇到數字時,就壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對他們做相應的計算(棧頂元素和次頂元素),并將結果入棧;重復上述過程直到表達式最左端,最后運算得出的值即為表達式的結果.

例如:(3+4)*5-6對應的前綴表達式就是- * + 3 4 5 6,針對前綴表達式求值步驟如下:

  1. 從右至左掃描,將6,5,4,3壓入堆棧.
  2. 遇到+運算符,因此彈出3和4(3為棧頂元素,4為次頂元素),計算出3+4的值,得7,再將7入棧.
  3. 接下來是*運算符,因此彈出7和5,計算出35,將35入棧.
  4. 最后是-運算符,計算出35-6的值,即29,由此得出最終結果.

中綴表達式

中綴表達式就是常見的運算表達式,如(3*4)+5-6.中綴表達式的求值是我們人最熟悉的,但是對計算機來說卻不好操作,因此在計算結果時,往往會將中綴表達式轉換成其他表達式來操作(一般轉換成后綴表達式).

后綴表達式

后綴表達式又稱為逆波蘭表達式,與前綴表達式類似,只是運算符在操作數之后.

如(3+4)*5-6對應的后綴表達式就是3 4 + 5 * 6 -

再比如

后綴表達式的計算機求值

從左至右掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個元素,用運算符對它們做對應的計算(棧頂元素和次頂元素),并將結果入棧,重復上述過程直到表示最右端,最后運算得出的值即為表達式的結果.

例如:(3+4)*5-6對應的后綴表達就是 3 4 + 5 * 6 -,針對后綴表達式求值步驟如下:

  1. 從左至右掃描,將3和4壓入堆棧.
  2. 遇到+運算符,因此彈出4和3(4為棧頂元素,3為次頂元素),計算出7,再將7入棧.
  3. 將5入棧.
  4. 遇到*運算符,因此單出5和7,計算出35,將35入棧.
  5. 將6入棧.
  6. 最后是-運算符,計算出29,由此得出最終結果.

中綴表達式轉后綴表達式

1.初始化兩個棧:運算符棧s1和存儲空中間結果的棧s2.

2.從左至右掃描表達式.

3.遇到操作數時,將其壓入s2.

4.遇到運算符時,比較其與s1棧頂運算符的優先級.

  1. 如果s1為空,或者棧頂運算符為左括號"(",則直接將此運算符入棧.
  2. 否則,若優先級比棧頂運算符的高,也將運算符壓入s1.
  3. 否則,將s1棧頂的運算符彈出并壓入s2中,再次轉到(4.1)與s1中新的棧頂運算符相比較.

5.遇到括號時:

  1. 如果是左括號"(",則直接壓入s1.
  2. 如果是右括號")",則依次彈出s1棧頂的運算符,并壓入s2,直到遇到左括號為止,此時將這一對括號丟棄.

6.重復步驟2至5,直到表達式最右邊.

7.將s1中剩余的運算符依次彈出并壓入s2.

8.依次彈出s2中的元素并輸出,結果的逆序即為中綴表達式對應的后綴表達式.

簡單的后綴表達式計算器

  1. package com.structures.stack; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.Arrays; 
  5. import java.util.List; 
  6. import java.util.Stack; 
  7.  
  8. public class PolandNotation { 
  9.     public static void main(String[] args) { 
  10.         //先給出逆波蘭表達式(3+4)*5-6==>3 4 + 5 * 6 - 
  11.         String expression = "1+(((2+3)*4))-5"
  12.         List<String> toInfixExpressionList = toInfixExpressionList(expression); 
  13.         System.out.println(toInfixExpressionList); 
  14.         List<String> suffixExpressList = parseSuffixExpressList(toInfixExpressionList); 
  15.         System.out.println(suffixExpressList); 
  16.         System.out.println(calculate(suffixExpressList)); 
  17.         /* 
  18.         [1, +, (, (, (, 2, +, 3, ), *, 4, ), ), -, 5] 
  19.         不存在該運算符 
  20.         不存在該運算符 
  21.         [1, 2, 3, +, 4, *, +, 5, -] 
  22.         16 
  23.         */ 
  24.     } 
  25.  
  26.     //將中綴表達式對應的List轉換成后綴表達式對應的List 
  27.     public static List<String> parseSuffixExpressList(List<String> ls) { 
  28.         //定義兩個棧 
  29.         Stack<String> s1 = new Stack<>();//符號棧 
  30.  
  31.         //說明:因為s2這個棧,在整個轉換過程中,沒有pop操作,而且后面還要逆序操作. 
  32.         //因此比較麻煩,這里我們就不用Stack<String> 直接使用List<String> s2. 
  33.         //Stack<String> s2 = new Stack<>();//存儲中間結果的棧s2 
  34.         List<String> s2 = new ArrayList<>(); 
  35.         for (String item : ls) { 
  36.             if (item.matches("\\d+")) { 
  37.                 s2.add(item); 
  38.             } else if (item.equals("(")) { 
  39.                 s1.push("("); 
  40.             } else if (item.equals(")")) { 
  41.                 //如果是右括號")",則依次彈出s1棧頂的運算符,并壓入s2,直到遇到左括號為止,此時將這一對括號丟棄. 
  42.                 while (!s1.peek().equals("(")) { 
  43.                     s2.add(s1.pop()); 
  44.                 } 
  45.                 s1.pop(); 
  46.             } else { 
  47.                 //當item優先級小于等于棧頂運算符,將s1棧頂的運算符彈出并壓入s2中,再次轉到(4.1)與s1中新的棧頂運算符相比較. 
  48.                 while (s1.size() != 0 && Operation.getValue(s1.peek()) >= Operation.getValue(item)) { 
  49.                     s2.add(s1.pop()); 
  50.                 } 
  51.                 //還需要將item壓入棧 
  52.                 s1.push(item); 
  53.             } 
  54.         } 
  55.         //將s1中剩余的運算符依次彈出并壓入s2 
  56.         while (s1.size() != 0) { 
  57.             s2.add(s1.pop()); 
  58.         } 
  59.         return s2; 
  60.     } 
  61.  
  62.     //將中綴表達式轉List 
  63.     public static List<String> toInfixExpressionList(String s) { 
  64.         List<String> ls = new ArrayList<>(); 
  65.  
  66.         int i = 0; 
  67.         String str;//對多位數拼接 
  68.         char c; 
  69.         do { 
  70.             //如果c是一個非數字,直接加入ls 
  71.             if ((c = s.charAt(i)) < 48 || (c = s.charAt(i)) < 57) { 
  72.                 ls.add("" + c); 
  73.                 i++; 
  74.             } else { 
  75.                 //如果是一個數,需要考慮多位數問題. 
  76.                 str = ""
  77.                 while (i < s.length() && (c = s.charAt(i)) >= 48 && (c = s.charAt(i)) <= 57) { 
  78.                     str += c; 
  79.                     i++; 
  80.                 } 
  81.             } 
  82.         } while (i < s.length()); 
  83.         return ls; 
  84.     } 
  85.  
  86.     //根據逆波蘭表達式求值 
  87.     public static int calculate(List<String> ls) { 
  88.         Stack<String> stack = new Stack<>(); 
  89.         for (String item : ls) { 
  90.             //這里使用正則表達式來取出數,匹配的是多位數 
  91.             if (item.matches("\\d+")) { 
  92.                 stack.push(item); 
  93.             } else { 
  94.                 int num2 = Integer.parseInt(stack.pop()); 
  95.                 int num1 = Integer.parseInt(stack.pop()); 
  96.                 int res = 0; 
  97.                 switch (item) { 
  98.                     case "+"
  99.                         res = num1 + num2; 
  100.                         break; 
  101.                     case "-"
  102.                         res = num1 - num2; 
  103.                         break; 
  104.                     case "*"
  105.                         res = num1 * num2; 
  106.                         break; 
  107.                     case "/"
  108.                         res = num1 / num2; 
  109.                         break; 
  110.                     default
  111.                         throw new RuntimeException("運算符有誤"); 
  112.                 } 
  113.                 stack.push(res + ""); 
  114.             } 
  115.         } 
  116.         return Integer.parseInt(stack.pop()); 
  117.     } 
  118.  
  119. //根據運算符返回對應的優先級數字 
  120. class Operation { 
  121.     private static int ADD = 1; 
  122.     private static int SUB = 1; 
  123.     private static int MUL = 2; 
  124.     private static int DIV = 2; 
  125.  
  126.     public static int getValue(String operation) { 
  127.         int result = 0; 
  128.         switch (operation) { 
  129.             case "+"
  130.                 result = ADD
  131.                 break; 
  132.             case "-"
  133.                 result = SUB; 
  134.                 break; 
  135.             case "*"
  136.                 result = MUL; 
  137.                 break; 
  138.             case "/"
  139.                 result = DIV; 
  140.                 break; 
  141.             default
  142.                 System.out.println("不存在該運算符"); 
  143.                 break; 
  144.         } 
  145.         return result; 
  146.     } 

 【編輯推薦】

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-03-18 08:44:20

Java數據結構算法

2021-03-09 06:30:32

JAVA數據結構算法

2021-04-13 09:37:41

Java數據結構算法

2021-05-12 09:07:09

Java數據結構算法

2021-03-10 08:42:19

Java數據結構算法

2021-03-17 09:27:36

Java數據結構算法

2021-03-08 06:28:57

JAVA數據結構與算法稀疏數組

2021-03-23 08:33:22

Java數據結構算法

2021-03-26 08:40:28

Java數據結構算法

2021-03-12 09:13:47

Java數據結構算法

2021-04-15 09:36:44

Java數據結構算法

2021-04-22 10:07:45

Java數據結構算法

2021-04-07 09:26:37

Java數據結構算法

2021-04-16 09:40:52

Java數據結構算法

2021-05-13 07:34:56

Java數據結構算法

2021-03-24 10:41:04

Java數據結構算法

2021-04-23 09:12:09

Java數據結構算法

2021-03-11 08:53:20

Java數據結構算法

2021-05-08 08:28:38

Java數據結構算法

2021-03-29 10:13:47

Java編程數據結構算法
點贊
收藏

51CTO技術棧公眾號

色婷婷综合久久久久中文一区二区| 国产精品69久久久久水密桃| 在线观看国产精品淫| www.国产视频.com| 天天做夜夜爱爱爱| 视频二区欧美| 91精品福利视频| 中国 免费 av| 国产资源在线播放| 国产麻豆91精品| 奇米4444一区二区三区 | 91精品丝袜国产高跟在线| 黑人欧美xxxx| 久久香蕉视频网站| 第一福利在线| 99久久精品情趣| 成人免费网站在线看| 日产精品久久久| 综合天天久久| 日韩在线免费高清视频| 日本a视频在线观看| 国产视频二区在线观看| 岛国精品在线播放| 成人在线视频网| 一级性生活大片| 国产中文欧美日韩在线| 色偷偷88欧美精品久久久| 成人午夜视频免费观看| 日本高清视频在线观看| 久久一夜天堂av一区二区三区| 91中文在线观看| 中文亚洲av片在线观看| 久久国产88| 国产亚洲精品91在线| 日本精品一区二区三区四区| 国产在线黄色| av电影在线观看不卡| 亚洲精品女av网站| 11024精品一区二区三区日韩| 手机在线电影一区| 亚洲色在线视频| 欧美精品欧美极品欧美激情| 一区中文字幕| 日韩欧美中文一区| 涩多多在线观看| 日韩福利在线观看| 欧美人伦禁忌dvd放荡欲情| 天天爱天天操天天干| 日韩一区二区三区在线免费观看| 色综合久久中文字幕| 自慰无码一区二区三区| 在线观看v片| 精品毛片三在线观看| 久久久久免费看黄a片app| 金瓶狂野欧美性猛交xxxx| 一区二区三区中文字幕精品精品| 日本三日本三级少妇三级66| 国产在线二区| 亚洲色图都市小说| 欧美一级中文字幕| av中文字幕电影在线看| 精品成人久久av| 亚洲 高清 成人 动漫| 欧美羞羞视频| 亚洲视频在线观看三级| 亚洲欧美日本国产有色 | 久久亚洲一区二区三区四区五区高 | www.在线成人| 久久国产手机看片| 黄色在线观看网| 国产精品女主播在线观看| 亚洲精品乱码视频| 18av在线播放| 久久天天做天天爱综合色| 欧美另类网站| 日本www在线| 亚洲精品日韩一| 日韩av电影免费在线观看| 久草视频视频在线播放| 亚洲欧洲另类国产综合| 精品在线一区| 大胆av不用播放器在线播放| 中文字幕一区二区三区四区 | 亚洲伊人成综合成人网| 蜜桃视频在线观看www| 99国产精品99久久久久久| 日本不卡高清视频一区| 成人在线直播| 懂色aⅴ精品一区二区三区蜜月| 欧美女人性生活视频| 欧美日韩va| 亚洲精品一区二区三区在线观看| 91精品人妻一区二区| 黄色a级片在线观看| 日韩精品久久久久久久软件91| 精品人伦一区二区色婷婷| xxxx日本免费| 欧美成人亚洲| 日本精品性网站在线观看| 911美女片黄在线观看游戏| 福利电影一区二区三区| 午夜老司机精品| 超碰免费在线97| 久久免费看少妇高潮| 欧美一级黄色录像片| 亚洲最大网站| 精品久久久国产| 国产又大又黄又猛| 久久久免费毛片| 日韩有码在线观看| av图片在线观看| 国产美女视频91| 日韩免费三级| 手机在线观看av| 日韩欧美亚洲另类制服综合在线| 污污的视频免费| 日本欧美高清| 久久久久久久久久av| 亚洲一区中文字幕永久在线| 91毛片在线观看| 久操手机在线视频| 婷婷久久免费视频| 亚洲性av在线| xxxx.国产| 成人深夜在线观看| japanese在线视频| 中韩乱幕日产无线码一区| 亚洲丁香婷深爱综合| 欧美人妻精品一区二区免费看| 真实国产乱子伦精品一区二区三区| 日韩av免费网站| 日韩中文字幕免费观看| 亚洲色图在线视频| 久久久久久久久久毛片| 色88久久久久高潮综合影院| 日本精品久久久久影院| 亚州视频一区二区三区| 亚洲成人中文在线| 霍思燕三级露全乳照| 精品视频一区二区三区| 亚洲精品www| 久久久精品一区二区涩爱| 国产在线不卡视频| 在线视频一二三区| 久久av网站| 久久69精品久久久久久久电影好 | 国产午夜精品福利视频| 免费欧美在线| 欧美日韩国产精品一卡| 一区二区电影免费观看| 日韩精品中文在线观看| 国产尤物在线视频| 国产日韩欧美a| 午夜宅男在线视频| 久久久久久久久国产一区| 91精品久久久久久久久久久久久久| 91官网在线| 欧美高清dvd| 青青草手机视频在线观看| 国产91精品在线观看| 男女视频网站在线观看| 网友自拍一区| 国产精品视频白浆免费视频| 在线观看av黄网站永久| 欧美日韩小视频| 欧美老女人bb| 在线欧美三区| 欧日韩一区二区三区| 黄色精品视频网站| 欧美成人手机在线| 色一情一乱一区二区三区| 一本大道av伊人久久综合| 免费看黄色三级| 亚洲深夜福利| 欧美日韩在线一区二区三区| 欧洲成人一区| 欧美成人在线网站| 亚洲aaaaaaa| 欧美网站一区二区| 国产suv一区二区三区| thepron国产精品| 老司机午夜av| 亚洲国产合集| 国产区精品在线观看| 123区在线| 中文字幕精品一区久久久久| 国产成人精品毛片| 一本一本大道香蕉久在线精品| 午夜精品久久久久99蜜桃最新版 | 亚洲欧美日韩视频二区| 在线精品日韩| 激情亚洲影院在线观看| 久久亚洲欧美日韩精品专区| 亚洲av成人精品毛片| 欧美日韩国产综合久久| 久草精品视频在线观看| 国产精品美女久久久久久2018 | 中文字幕av无码一区二区三区| 亚洲精品中文在线| 美女久久久久久久久久| 国产成人精品影视| 黄色片在线免费| 伊人激情综合| 国产又爽又黄ai换脸| 日韩影视高清在线观看| 超碰97人人在线| 性欧美freehd18| 97色在线视频观看| 亚洲区欧洲区| 中文字幕国产亚洲| 日韩电影在线观看完整版| 亚洲福利视频一区| 老司机精品免费视频| 久久午夜免费电影| 国产一级黄色录像| 国产成人福利片| 在线黄色免费观看| 久久综合亚州| 日韩精品第一页| 欧美日韩导航| 97人人模人人爽人人少妇| 亚洲小说区图片区都市| 中文字幕自拍vr一区二区三区| 少妇高潮一区二区三区69| 91精品国产综合久久久久久久| 亚洲国产成人精品女人久久| 天天综合色天天综合色h| 免费视频网站www| 亚洲欧美日韩精品久久久久| 四虎地址8848| 国产精品色一区二区三区| 伊人网在线视频观看| 不卡欧美aaaaa| 亚洲一区二区在线免费| 成人精品电影在线观看| 日韩久久久久久久久久久| 久久国产精品一区二区| 污污动漫在线观看| 久色婷婷小香蕉久久| 亚洲少妇久久久| 秋霞电影网一区二区| 国内自拍视频网| 久久av资源站| 视频免费1区二区三区| 国产一区二区三区四区老人| 国产精品夜夜夜爽张柏芝| 97精品国产福利一区二区三区| 深田咏美在线x99av| 成人国产精品一级毛片视频| 天堂资源在线亚洲视频| 日韩精品免费| 欧美 日韩 国产 在线观看| 亚洲国产精品久久久久蝴蝶传媒| 一区二区视频在线播放| 小处雏高清一区二区三区| 强开小嫩苞一区二区三区网站 | 欧美调教视频| 国产在线一区二| 少妇精品久久久| 五月婷婷一区| 自拍欧美日韩| 欧美精品久久久久久久久久久| 亚洲主播在线| 欧美成年人视频在线观看| 精品一区二区三区免费| 农村末发育av片一区二区| av高清久久久| 中国1级黄色片| 亚洲综合一二三区| 久草手机在线观看| 欧美日韩电影一区| 精品国自产在线观看| 日韩经典中文字幕| 天天在线视频色| 久久久免费观看视频| 国产精品字幕| 91沈先生播放一区二区| 全国精品免费看| 在线观看成人av电影| 樱桃成人精品视频在线播放| 欧美日韩一区二区在线免费观看| 欧美激情日韩| 精品国产一区三区| 男女性色大片免费观看一区二区 | 免费黄色日本网站| 麻豆精品在线播放| 无码人妻精品一区二区三区99不卡| 久久久无码精品亚洲日韩按摩| 亚洲a∨无码无在线观看| 亚洲成av人片一区二区梦乃| 亚洲综合网av| 亚洲第一精品夜夜躁人人爽| 日本www在线观看| 国产91精品不卡视频| 久久精品九色| 天天久久人人| 亚洲免费高清| www.污网站| 国产亚洲自拍一区| 国产香蕉在线视频| 欧美日韩电影在线播放| 青青国产在线| 欧美激情视频播放| www欧美在线观看| 欧美亚洲另类久久综合| 国内自拍视频一区二区三区| 91国产精品视频在线观看| 波多野结衣一区二区三区| 国产精品精品软件男同| 欧美在线一区二区| 天天干,夜夜爽| 色在人av网站天堂精品| 九九久久国产| 日本午夜精品一区二区| 一本久久综合| 9191在线视频| 亚洲精品视频免费看| 亚洲图片中文字幕| 亚洲最大在线视频| 亚洲精品动漫| 国产一区二区三区无遮挡| 欧美日韩精品免费观看视频完整| 99sesese| 国产精品欧美综合在线| 一级片在线免费播放| 日韩激情在线视频| 美女高潮视频在线看| 成人动漫视频在线观看完整版| 午夜精品视频一区二区三区在线看| 亚洲黄色小视频在线观看| 久久综合色8888| 可以在线观看av的网站| 亚洲国产天堂久久综合| 超碰97国产精品人人cao| 2014亚洲精品| 国产精品www994| 精产国品一区二区三区| 亚洲精品欧美综合四区| 亚洲成人黄色片| 久久久久久综合网天天| 91亚洲精品视频在线观看| 50度灰在线观看| 国产91丝袜在线18| 日产欧产va高清| 日韩精品视频免费| 欧美精品日日操| 三区精品视频观看| 欧美a级理论片| 极品色av影院| 日韩欧美激情一区| 98色花堂精品视频在线观看 | 日韩电影在线视频| 污污网站免费观看| 中文字幕一区二区三区在线播放| 国产精品久久久久久免费播放| 日韩精品一区二区三区四区视频| 伊人精品影院| 国产精品一区免费观看| 一区二区三区福利| 欧美特级黄色录像| 欧美性色黄大片手机版| 麻豆传媒视频在线观看免费| 成人春色激情网| 好看不卡的中文字幕| 亚洲av成人片色在线观看高潮 | 亚洲精品美腿丝袜| 国精品人妻无码一区二区三区喝尿| 韩国国内大量揄拍精品视频| 久草精品在线| 老司机久久精品| 亚洲高清免费观看高清完整版在线观看| 香港三日本三级少妇66| 国产精品久久久久久久久久久不卡| 五月激情久久久| 大尺度做爰床戏呻吟舒畅| 欧洲一区二区av| 宅男网站在线免费观看| 久久久久天天天天| 精品一区二区三区在线视频| 激情五月少妇a| 亚洲女在线观看| 538视频在线| 日韩欧美精品一区二区| 国产精品夜夜嗨| 无码人妻av免费一区二区三区| 久久在线免费视频| 亚洲欧美成人vr| 在线观看日本www| 欧美视频中文字幕在线| 麻豆免费在线视频| 蜜桃视频成人| 国产乱对白刺激视频不卡| 影音先锋亚洲天堂| 久久精品国产亚洲7777| 久久99精品久久久久久园产越南| 日韩高清在线一区二区| 色综合夜色一区| 黄色美女视频在线观看| 亚洲视频欧美在线| 2023国产一二三区日本精品2022|