表示式求值是棧應用的乙個典型的應用例項。
在計算機中,任何乙個表示式都是由運算子和運算元構成的。今天我討論的是運算子僅含有 + - * / ()的情況。
圖源:表示式求值
#include
struct sqstack
;char opset[10]
=;//用來進行比較運算子優先順序的矩陣,3代表'=',2代表'>',1代表'
int cmp[7]
[7]=
,,,,
,,};
sqstack num;
sqstack oper;
void
initstack
(sqstack &s)
;//初始化棧
void
push
(sqstack &s,
char ch)
;//入棧
char
gettop
(sqstack &s)
;//獲取棧頂元素的值
intin
(char ch,
char operarr[10]
);//判斷是否為運算子
intcal()
;int pop (sqstack &s,
char
&x);
//出棧
char
compare
(char oper1,
char oper2)
;int
count
(int x1,
char op,
int x2)
;void
initstack
(sqstack &s)
void
push
(sqstack &s,
char ch)
s.top++
; s.data[s.top]
= ch;
return;}
char
gettop
(sqstack &s)
char ch;
ch = s.data[s.top]
;return ch;
}int
pop(sqstack &s,
char
&x)intin(
char ch,
char operarr[10]
)}return0;
}char
compare
(char oper1,
char oper2)
if(oper2 == opset[i])}
ans = cmp[m]
[n];
switch
(ans)
}int
count
(int x1,
char op,
int x2)
return val;
}int
cal(
)push
(num, data)
;//運算元入棧
}else}}
val =
gettop
(num)
;return val;
}int
main()
算術表示式求值(C語言棧)
題目描述 表示式計算是實現程式語言的基本問題之一,也是棧的應用的乙個典型例子。設計乙個程式,演示用運算子優先法對算數表示式求值的過程。基本要求 以字串行的形式從終端輸入語法正確的 不含變數的整數表示式。利用教科書表3.1給出的運算子優先關係,實現對算數四則混合運算表示式的求值,並仿照教科書的例3.1...
c push 應輸入表示式 用棧進行表示式求值
我們今天繼續看一下,如何使用棧完成標準的四則混合運算表示式求值。不同於字尾表示式,遇到乙個運算子就可以直接從棧裡取兩個數進行運算。在標準的四則混合運算表示式中 或者我們稱之為中綴表示式 遇到乙個操作符是不能直接計算的,因為計算的順序要取決於後面的運算子。多舉幾個例子,大家就能明白了。由於加和減是相同...
棧實現表示式求值(C
為了實現用棧計算算數表示式的值,需設定兩個工作棧 用於儲存運算子的棧opter,以及用於儲存運算元及中間結果的棧opval。演算法基本思想如下 1 首先將運算元棧opval設為空棧,而將 作為運算子棧opter的棧底元素,這樣的目的是判斷表示式是否求值完畢。2 依次讀入表示式的每個字元,表示式須以 ...