【實驗目的】
1.掌握棧的基本操作演算法的實現,包括棧初始化、進棧、出棧、取棧頂元素等。
2.掌握利用棧實現中綴表示式求值的演算法。
【實驗內容】
問題描述
輸入乙個中綴算術表示式,求解表示式的值。運算子包括「+」、「-」、「」、「/」、「(「 、「)」、「=」,參加運算的數為 double型別且為正數。(要求:直接使用中綴算術表示式進行計算,不能轉換為字尾或字首表示式再進行計算,只考慮二元運算即可。)
輸入要求
多組資料,每組資料一行,對應乙個算術表示式,每個表示式均以「=」結尾。當表示式只有乙個「=」時,輸入結東。參加運算的數為 double型別。
輸出要求
對於每組資料輸出1行,為表示式的運算結果。輸出保留兩位小數。
輸入樣例
2+2=
20(4.5-3)=
輸出樣例
4.00
30.00
【實驗提示】
此實驗內容即為教材演算法3.4的擴充套件內容,演算法3.4只考慮個位數的運算,不具備拼數功能。拼數功能可以手工編寫,也可以借助c語言的庫函式atof()函式來完成,其功能是將字串轉換為雙精度浮點數( double)。
#include
#include
#include
#include
#include
#include
using
namespace std;
intpre
(char c)
//優先順序判斷
void
calculate
(stack<
double
>
&num,stack<
char
>
&op)
//運算
op.pop();
}int
main()
else
//字元是操作符
else
if(op.
empty()
||pre
(s[i]
)>
pre(op.
top())
)//優先順序大於棧頂,或棧為空時,直接進棧
op.push
(s[i]);
elseif(
!op.
empty()
&&pre
(s[i]
)<=
pre(op.
top())
)//是優先順序不大於棧頂的操作符,且棧不空,先進行運算操作}}
printf
("%.2lf\n"
,num.
top())
;//輸出結果
num.
pop();
op.pop();
//清空棧
}return0;
}
基於棧的中綴算術表示式求值
include include include include using namespace std typedef struct stacknode lstack 兩個棧,乙個是字元,乙個是數字,先判斷是什麼字元,然後呼叫不同的函式 typedef struct data struct stac...
算術中綴表示式求值(棧實現)
問題描述 輸入由整型分量和操作符組成的中綴表示式,輸出其字尾表示式和運算的結果。整型分量 十進位制數。操作符 如輸入3 5 8 2 7,輸出 3 5 8 2 7 結果是10 輸入3 1 4 7 3 輸出 3 1 4 7 3 結果是 18.75 輸入3 4 5 5 7 4,輸出 3 4 5 5 7 4...
基於棧的字尾算術表示式求值
這是乙個菜雞的19秋季學期資料結構實驗課 基於棧的字尾算術表示式求值 實驗目的 1.掌握中綴表示式轉換為字尾表示式的演算法。2.掌握字尾表示式求值的演算法。實驗內容 問題描述 輸入乙個中綴算術表示式,將其轉換為字尾表示式,然後對字尾表示式進行求值。運算子包括 參與運算的為小於10的自然數 只考慮二元...