C語言 簡易表示式求值(棧的初步應用)

2021-09-27 13:14:07 字數 1737 閱讀 7763

表示式求值是棧應用的乙個典型的應用例項。

在計算機中,任何乙個表示式都是由運算子和運算元構成的。今天我討論的是運算子僅含有 + - * / ()的情況。

圖源:表示式求值

#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 依次讀入表示式的每個字元,表示式須以 ...