這是清華大學鄧俊輝資料結構(c++)中的乙個案例,通過使用棧這種資料結構,完成了較為複雜的表示式求值問題,以下**是我整理改編而成,能夠完成加減乘除,乘方、階乘的運算,以及括號的處理。
在這裡,我使用到了c++ stl 中的容器stack。
#include#include#include#include#includeusing namespace std;
#define n_optr 9
//建立兩個棧,乙個儲存數字,乙個儲存符號
stackopnd;//儲存數字
stackoptr;//儲存字元
typedef enum operator;
const char pri[n_optr][n_optr] = //運算子優先順序表
;operator convert(char s) //返回列舉型別
}bool isdigit(char s) //判斷讀取到的字元是否是數字
float calcu(float popnd) //階乘單目運算
float calcu(float a, char op, float b) //普通雙目運算
}char orderbetween(char s1, char s2) 判斷棧頂運算子與正在讀取到的運算子優先順序
void readnum(char *& s) //處理數字,尤其是如23這種連在一塊的數字
if (*s != '.') return; //判斷是否有小數點
float fration = 1; //進行小數點後面運算
while (isdigit(*(++s))) }
float evalue(char *s)
else
break;
case '>':
else
} break;
case '=':
break;
default: exit(-1);
}} }
return opnd.top();
}int main()
表示式求值問題之表示式樹
include include include include define m 1005 define clr arr,now memset arr,now,sizeof arr using namespace std stackshu typedef struct node tire,t cha...
表示式求值的問題
include include include define false 0 define true 1 define error 0 define ok 1 define overflow 1 typedef int status stack typedef char selemtype defi...
NYOJ 表示式求值問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 4描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入第...