首先提一句,我所用的ide是vs2013。編譯器不同,所支援的特性也就不同;
現在的c++已經發展到c++11版本,因此vs2008基本就不支援c++11新的特性;
我們用字尾表示式,利用資料結構中的棧,進行結果的計算
如果是運算元,則壓棧
如果是操作符,則出棧兩個元素,根據操作符進行計算之後再壓棧
#includeusing namespace std;
#include"stack.h"
enum type//定義乙個列舉型別,讓我們觀察起來更加直觀
;struct cell//定義cell結構體
;int countrpn(cell* cell, size_t n)
else if (cell[idx]._type == op_symbol)//當型別為操作符,就取出兩個元素,求值再壓棧
}else//型別錯誤,丟擲異常
}return s.top();//返回棧中最後乙個元素,就是我們求得的結果
}
資料結構棧之計算字尾表示式
對於乙個給定的字尾表示式,如果它是合法的 注意 次演算法是基於基本操作符是2元操作符且運算元為一位正整數!其求值的基本思想是 對於給定的表示式進行遍歷,假設遇到的是運算元就將其壓入棧 假設遇到的是操作符,將棧頂的兩個元素彈出,假設棧頂兩個元素依次為a,b a在上b在下 將次操作符應用於這兩個棧頂元素...
表示式 棧的實現 資料結構
這段 對一些讀入的非法資料判斷存在錯誤 比如像出現 a b 就無法判斷了 另外需要注意的是我覺得棧裡面儲存的是char型的,但是在運算元值的時候,會很不方便 還有一點在主函式裡面如果想用while來多次讀入資料的話,那麼你要考慮上一次輸入資料失敗後,那後面的字元該怎麼操作 上面出現的問題大家可以嘗試...
資料結構《中綴表示式轉字尾表示式的實現》
主要功能 利用棧將中綴表示式轉換成字尾表示式 並對字尾表示式求值。include include include using namespace std define maxsize 50 typedef char elemtype typedef struct sqstack typedef st...