前中字尾表示式
X綴表示式
- 中綴表示式:(a+b)
- 字首表示式:+ab
- 字尾表示式:ab+
與字首或字尾記法不同的是,中綴記法中括號是必需的。\
計算過程中必須用括號將操作符和對應的運算元括起來,用於指示運算的次序。
中綴表示式
中綴表示式和我們一般的邏輯一樣,不過是括號不能省。
字首表示式
具體做法
人工實現轉換
中綴表示式:a+b*c-(d+e)
第一步:按照運算子的優先順序對所有的運算單位加括號:式子變成了:((a+(b*c))-(d+e))
\
字首表示式:把運算子號移動到對應的括號前面則變成了:-( +(a *(bc)) +(de))
把括號去掉:-+a*bc+de
字首式子出現
字尾表示式
具體做法:
人工實現轉換
中綴表示式:a+b*c-(d+e)
第一步:按照運算子的優先順序對所有的運算單位加括號:式子變成了:
((a+(b*c))-(d+e))
字尾表示式:把運算子號移動到對應的括號後面則變成了:
((a(bc)* )+ (de)+ )-
把括號去掉:abc*+de+-
字尾式子出現
程式邏輯
從表示式頭開始掃描\
數字時,加入字尾表示式;\
運算子:\
a. 若為 ‘(‘,入棧;\
b. 若為 ‘)’,則依次把棧中的的運算子加入字尾表示式中,直到出現’(‘,從棧中刪除’(’ ;\
c. 若為 除括號外的其他運算子, 當其優先順序高於除’(‘以外的棧頂運算子時,直接入棧。\
否則從棧頂開始,依次彈出比當前處理的運算子優先順序高和優先順序相等的運算子,直到一個比它優先順序低的或者遇到了一個左括號為止,然後將其自身壓入棧中(先出後入)。
·當掃描的中綴表示式結束時,棧中的的所有運算子出棧;
具體案例:
表示式:3+(2-5)*6/3
步驟 | 字尾表示式 | 棧 |
---|---|---|
1 | 3 | + |
2 | 3 | +( |
3 | 3 2 | +(- |
4 | 3 2 5 - | + |
5 | 3 2 5 - | +* |
6 | 3 2 5 - 6 * | +/ |
7 | 3 2 5 - 6 *3 | +/ |
8 | 3 2 5 - 6 *3 /+ |
實現程式碼:
/**
* 後序遍歷遞迴實現
*
* 左 右 中
* @param node
*/
public void nextOrder(Node node) {
if (node == null) {
return;
}
nextOrder(node.left);
nextOrder(node.right);
System.out.println(node.data);
}
/**
* 後序遍歷非遞迴實現
* @param node
*/
public void nextOrder2(Node node) {
if (node == null) {
return;
}
Stack<Node> stack = new Stack<>();
Node p = node;
while (node != null) {
while (node.left != null) {
stack.push(node);
node = node.left;
}
while (node != null && (node.right == null || node.right == p)) {
System.out.println(node.data);
p = node;
if (stack.isEmpty()) {
return;
}
node = stack.pop();
}
stack.push(node);
node = node.right;
}
}
參考
主要參考百度百科,同時做了一些排版的處理
相關文章
- 中綴表示式轉字尾表示式
- 中綴表示式轉化為字尾表示式並求值
- 字首中綴字尾表示式規則
- 【資料結構與演算法】中綴表示式轉字尾表示式以及字尾表示式的計算資料結構演算法
- 逆波蘭演算法、中綴表示式轉字尾表示式演算法
- 教你如何在C++中實現中綴表示式轉字尾表示式C++
- 棧的應用---字尾表示式
- js實現四則計算(中綴,字尾表示式)JS
- Java | 在 Java 中執行動態表示式語句: 前中字尾、Ognl、SpEL、Groovy、Jexl3Java
- 資料結構與演算法——棧(五)中綴表示式轉字尾表示式資料結構演算法
- 【棧】【字串語法】牛牛與字尾表示式字串
- [藍橋杯 2019 省 B] 字尾表示式
- 中綴轉字尾表示式思路分析和程式碼實現
- C#字尾表示式解析計算字串公式C#字串公式
- 藍橋杯2019年真題:字尾表示式
- 將算數表示式轉換成字尾表示式並計算結果
- C語言- 基礎資料結構和演算法 - 09 棧的應用_中綴表示式轉字尾表示式20220611C語言資料結構演算法
- C#資料結構與演算法系列(十):逆波蘭計算器——逆波蘭表示式(字尾表示式)C#資料結構演算法
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 中綴轉字尾和字首
- Python正規表示式匹配字串中的數字Python字串
- 正規表示式刪除字串中的漢字字串
- 3045. 統計前字尾下標對 II(困難)
- 正規表示式匹配漢字
- 中綴表示式
- 中綴表示式轉為逆波蘭表示式
- 匹配純數字正規表示式
- SQLite中的表示式SQLite
- 從CF1935B學習維護前字尾區間mex
- 關於利用STL棧求解四則中綴表示式以及中綴表示式轉逆波蘭表示式和逆波蘭表示式的求解
- milvus 中的 coord 字尾和 node 字尾有什麼區別? 相關文件說明在哪裡?
- .NET 中的表示式樹
- 何謂中綴表示式
- MShadow中的表示式模板
- Java 中的 Lambda 表示式Java
- 計算中綴表示式
- 字串字尾相關字串
- 字尾陣列,SA陣列