資料結構 棧 (七) 使用棧計算字尾表示式

2021-09-12 23:33:16 字數 1129 閱讀 1771

字尾表示式的計算思路為:

從左到右掃瞄字尾表示式,如果遇到運算元,將其壓入棧中,如果遇到操作符,則從棧中彈出兩個運算元,計算結果,然後把結果入棧,直到遍歷完字尾表示式,則計算完成,此時的棧頂元素即為計算結果。

/**

* 棧實現表示式計算

* * @author lkf

* @date 2019-03-18 16-37

*/public class stackexpression

//將操作符壓入操作符棧中

operatorstack.push(achararr.charat(0));

} else if ("*".equals(achararr.trim()) || "/".equals(achararr.trim()))

operatorstack.push(achararr.charat(0));

} else if ("(".equals(achararr.trim())) else if (")".equals(achararr.trim()))

operatorstack.pop();//將進行過計算的左括號彈出

} else }}

//對棧中資料進行計算,知道棧為空為止

while (!operatorstack.isempty())

//此時運算元棧中的棧頂元素也就是計算結果

return operandstack.pop();

}/**

* 根據棧頂的運算子,計算位於棧頂的運算元

** @param operandstack 運算子棧

* @param operatorstack 運算元棧

*/private static void processoneoperator( stackoperandstack, stackoperatorstack ) else if (operator == '-') else if (operator == '*') else if (operator == '/')

}public static void main( string args )

}

輸出結果:

3+(8-3)*6/3 = 13

資料結構棧之計算字尾表示式

對於乙個給定的字尾表示式,如果它是合法的 注意 次演算法是基於基本操作符是2元操作符且運算元為一位正整數!其求值的基本思想是 對於給定的表示式進行遍歷,假設遇到的是運算元就將其壓入棧 假設遇到的是操作符,將棧頂的兩個元素彈出,假設棧頂兩個元素依次為a,b a在上b在下 將次操作符應用於這兩個棧頂元素...

資料結構 七 棧

棧按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料。棧是只能在某一端插入和刪除的特殊線性表。進行刪除和插入的一端稱棧頂,另一端稱棧底。插入一般稱為進棧,刪除則稱為退棧。棧也稱為後進先出表。用陣列模擬stack實現部分方法。陣列實現堆疊 auth...

資料結構 棧 棧

可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...