c語言用棧實現計算中綴表示式

2021-10-04 19:20:21 字數 1784 閱讀 5285

解決這個問題需要兩步:

將中綴式換成字尾式(字尾式更利於寫演算法)

計算字尾式。

因為還要滿足多位數和小數,所以用了字串。

typedef

struct

x;typedef

struct

sqstack;

關於棧的一些函式就不寫了,應該都知道。

下面直接給中綴式換字尾式**(有注釋)。

void

change

(sqstack s, x a[

], x b)

//將中綴表示式變為字尾表示式,a是輸入的中綴式,b是轉換完的字尾式。

if(a[i]

.c[0]==

'+'|| a[i]

.c[0]==

'-'|| a[i]

.c[0]==

'*'|| a[i]

.c[0]==

'/')

//遇到運算子,若優先順序大於棧頂運算子則進棧,否則吐出棧頂元素,再次比較,直至優先順序小於棧頂運算子或棧空,入棧。**(括號優先順序最低)**

else

else}if

(j ==-1

)}}if

(a[i]

.c[0]==

'('|| a[i]

.c[0]==

'['|| a[i]

.c[0]==

'if(a[i]

.c[0]==

')')

//遇到右括號,將棧內的運算子依次吐出。

else}}

else

break;}

else}}

}if( a[i]

.c[0]==

']')

else}}

else

break;}

else}}

}if( a[i]

.c[0]==

'}')

else}}

else

break;}

else}}

}}for(

int k = s.top; k >=

0; k--

)}

然後再就是運算的演算法。(這個就比較簡單了)

void

operate

(sqstack s, x b)

//計算表示式

else

//知道遇到運算子。將棧頂前兩個元素出棧並計算再將結果壓入棧內。

} x y;

y = s.c[s.top]

;double t =

atof

(y.c)

;printf

("%.2f"

, t)

;}

還有乙個細節就是字串和浮點型資料的轉換了(當然int型也有轉換,但還要計算小數,所以選用了浮點型)

void

calculate

(char b,

char c,

char a,

char x)

//計算

部分知識引用於

新手上路,寫的比較水,謝謝**。嘻嘻。

C用棧實現中綴表示式轉字尾表示式

include include include define maxsize 100 設順序表的最大長度為100,可依具體情況分配空間 typedef char datatype typedef struct datatype data maxsize int top 棧頂指標 seqstack 順...

用棧實現表示式計算 C

思路 1.首先建立倆個棧,乙個存資料 datastack 另乙個存運算子 operatorstack 2.表示式計算 資料 datasatck,運算子 operatorstack if 當運算子棧為空時 將第乙個運算子放入棧中 else if 此時的運算子的優先順序 棧頂的運算子優先順序 運算子入棧...

用棧實現表示式計算

public class calculator public static inthandle string express else else else else int num integer.parseint keepnum keepnum numstack.push num index if...