格式化表示式
public
class
infixcalculator
}private
static string insertblanks
(string expression)
else
}return sb.
tostring();}}
執行結果
//中綴表示式實現的簡易的計算器
/** 操作符棧
* 數字棧
* 如果遇到數字 直接進數字棧
* 如果遇到操作符
* 1、如果操作符棧為空 直接進
* 2、如果操作符棧頂為( 直接進
* 3、如果操作符棧頂為其他操作符
* 當前的操作符比棧頂的操作符的優先順序大 直接進
* 當前的操作符比棧頂的操作符的優先順序等於或小於 將操作符棧中比當前操作符優先順序大的所有操作符處理
* 直到空棧或( 或小優先順序的操作符為止
* 4、當前操作符是)將操作符棧中(上面的所有操作符處理掉 最終(彈棧即可
* */
public
class
infixcalculator
else
if(token.
charat(0
)=='+'||token.
charat(0
)=='-')
operatorstack.
push
(token.
charat(0
));}
else
if(token.
charat(0
)=='*'||token.
charat(0
)=='/')
operatorstack.
push
(token.
charat(0
));}
else
if(token.
charat(0
)==')')
operatorstack.
pop();
}else
if(token.
charat(0
)=='(')
else
}//將剩餘的數字和操作符處理
while
(!operatorstack.
isempty()
) system.out.
println
(numberstack.
pop())
;}//在數字棧中彈出兩個數字 在操作符棧中彈出乙個操作符 做運算
private
static
void
processanoperator
(arraystack
numberstack, arraystack
operatorstack)
else
if(op==
'-')
else
if(op==
'*')
else
if(op==
'/')
}private
static string insertblanks
(string expression)
else
}return sb.
tostring();}}
執行結果
28
棧的應用之中綴轉字尾
include stdio.h include stdlib.h include string.h include linkstack.h int isnumber char c int isoperator char c int isleft char c int isright char c c...
基於棧的應用之中綴轉字尾
include include include include includeusing namespace std void infix2postfix const string infix,string postfix bool isparenleft char ch bool isparenr...
棧的基礎應用之中綴轉換字尾
演算法詳解 1 在遇到運算元時,將其追加到輸出字串postfix中,在字尾表示式中,運算元的順序與其在中綴表示式中的順序相同,中綴表示式中操作符左邊的運算元也出現在字尾表示式中的操作符的左邊。2 使各個左括號符入棧。3 在遇到操作符時,若棧為空,則使操作符入棧。若棧非空,則使優先順序更高 或相同 的...