執行完成後,先輸出佇列內容,在輸出棧內容,最終結果即是後序表示式
/**
* 先序表示式 -> 後序表示式
*/public string infixtopostfix(string elements)
if (s.equals(")"))
continue;
}//碰到"+"或 "-"運算子
if (s.equals("+") || s.equals("-"))
while (!stack.isempty() && !stack.peek().equals("("))
stack.push(s);
continue;
}//碰到"*"或 "/"運算子
if (s.equals("*") || s.equals("/"))
boolean peek = stack.peek().equals("*") || stack.peek().equals("/");
while (!stack.isempty() && peek)
stack.push(s);
continue;
}queue.enqueue(s);
}//拼接後序表示式
do while (!queue.isempty());
do while (!stack.isempty());
return res;
}
/**
* 1.3.11 計算後序表示式的值
*/public class evaluatepostfix
stacktmp = new stack<>();
string res = "";
while (!stack.isempty())
continue;
}tmp.push(pop);
res = pop;
}return integer.parseint(res);
}public int evaluate(int a, int b, string operator)
}}
「中序表示式」轉換為「前序表示式」 「後序表示式」
首先看下面所示 中序表示式 2 3 2 1 3 4 1 前序表示式 23 21 3 41 後序表示式 23 21 341 中序表示式對我們而言是很直觀的 我們平時接觸的就是這個 但計算機處理起來比較麻煩 括號 優先順序之類的 前序和後序表示式中沒有括號,而且在計算中只需單向掃瞄,不需要考慮運算子的優...
中序表示式轉後序表示式
演算法的思想是這樣的 演算法分為兩個棧,乙個opstack為操作符棧,另一numstack為運算元棧,隨著程式執行運算元棧中里也會有操作符,這是因為小運算元和操作符化作了更大的運算元。如果需要求值,就會將運算元計算出結果,而由於此演算法只是求表示式,所以就保留了操作符。每一次彈出棧時都會涉及到操作符...
中序表示式轉為後序表示式(c語言)
按照中序表示式與後序表示式的規則借助堆疊進行表示即可 後附詳細鏈結二叉運算樹 中序表示式就是我們在數學中見到的中規中矩的表示式,例如3 2 2 3 7 後序表示式滿足運算符號置於數字的後面 在轉化的過程中滿足的規則 講解 include include include define maxsize ...