棧是一種只允許一端操作的線性資料結構,具有lifo(last in first out)的特點,具有廣泛的應用。現在打算用棧結構來實現字尾表示式的計算。
字尾表示式,指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則)。例如5+(2+3)*4轉換為字尾表示式為523+4*+規則:從左向右掃瞄,遇到數字壓棧,遇到操作符,彈出棧頂的兩個元素,先彈出的元素在右邊,後彈出來的在左邊,進行計算後,將結果壓棧,再往後掃瞄,直到掃瞄結束,輸出棧頂元素,即為最終結果。以
5 2 3 + 4 * +
為例
5壓棧 2壓棧 3壓棧 遇到+號,彈出3 2,計算2+3,將5壓棧,此時棧為5 5,將4壓棧,遇到*號,彈出4 5,計算5*4,將20壓棧 此時棧為5 20 ,遇到+號,計算5+20,將25壓棧,掃瞄結束,輸出25。
以上就是計算過程。下面用c++編寫**,為了方便標記算式的結束,在末尾我們加上#,用來標識算式結束,這裡我們只進行四則運算。
#include
#include
#include
"string"
using
namespace std;
intmain()
if(temp[i]
=='#'
)//如果是#,輸出,結束
if(temp[i]
<=
'9'&&temp[i]
>=
'0')
//如果是數字,壓棧
a.push
(temp[i]
-'0');
else
}++i;
}return0;
}
編譯器devc++5.40
1.測試結果
計算表示式值(字尾表示式) 棧
處理表示式主要是對優先順序以及括號的判斷 1.運算子棧頂的優先順序小於加入的時,需要將所有的不評級的取出並計算,2.當遇到 時,需要括號內的運算全部處理 2.其他情況全部加入運算子棧和資料棧 include include include using namespace std typedef lo...
棧(字尾表示式的計算)
就我個人來說,字尾表示式看起來很彆扭,但是從變成來看,字尾表示式的處理比中綴表示式的處理方便很多。中綴表示式 30 4 x 5 6 164 字尾表示式 30 4 5 x 6 164 對於中綴表示式而言,一般需要兩個棧 數棧和符號棧,並且處理過程中需要注意括號運算。就上面的中綴表示式來看,先計算括號裡...
利用棧計算字尾表示式
字尾表示式又稱作逆波蘭式,操作符在運算數的後面,所以叫做字尾表示式。例如 1 2 3的字尾表示式是 1 2 3 可以 2 3 看作乙個運算數a,1 a 也符合運算數 運算數 操作符的格式。的特殊處理 因為要處理大於9的數,所以要在每個數和操作符後加上空格,將相鄰的數分隔開。字尾表示式以字串的形式存在...