字尾表示式的計算思路為:
從左到右掃瞄字尾表示式,如果遇到運算元,將其壓入棧中,如果遇到操作符,則從棧中彈出兩個運算元,計算結果,然後把結果入棧,直到遍歷完字尾表示式,則計算完成,此時的棧頂元素即為計算結果。
/**
* 棧實現表示式計算
* * @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...