資料結構 表示式求值

2022-05-25 04:21:10 字數 3562 閱讀 2121

程式**如下:

1 #include 2 #include 3 #include 45

#define stack_init_size 100

6#define stackincrement 10

7#define overflow -2

8#define ok 1

9#define error 0

1011 typedef char

selemtype;

12 typedef int

elemtype;

1314

//棧結構體

15 typedef struct

sqstackoptr;//

運算子棧

2021 typedef struct

sqstackopnd;//

運算數棧

2627

//運算子棧

28int initstackoptr(sqstackoptr *s);//

初始化棧

29 selemtype gettopoptr(sqstackoptr *s);//

取得棧頂元素

30int pushoptr(sqstackoptr *s,selemtype e);//

入棧31

int popoptr(sqstackoptr *s,selemtype *e);//

刪除棧中的元素

32int destorystackoptr(sqstackoptr *s);//

銷毀棧33

//運算數棧

34int initstackopnd(sqstackopnd *s);//

初始化棧

35 elemtype gettopopnd(sqstackopnd *s);//

取得棧頂元素

36int pushopnd(sqstackopnd *s,selemtype e);//

入棧37

int popopnd(sqstackopnd *s,selemtype *e);//

刪除棧中的元素

38int destorystackopnd(sqstackopnd *s);//

銷毀棧39

//表示式求值

40 elemtype evaluateexpression(sqstackoptr *optr,sqstackopnd *opnd);//

輸入表示式並計算表示式的值

41 selemtype precede(char topc,char c);//

判斷運算子優先順序

42 elemtype operate(selemtype a,selemtype theta,selemtype b);//

計算部分表示式的值

43 elemtype in(char c,char op);//

判斷輸入的字元是不是運算子

4445

//初始化棧

46int initstackoptr(sqstackoptr *s)

51 s->top = s->base

;52 s->stacksize =stack_init_size;

53return

ok;54}55

56int initstackopnd(sqstackopnd *s)

61 s->top = s->base

;62 s->stacksize =stack_init_size;

63return

ok;64}65

66//

取得棧頂元素

67 selemtype gettopoptr(sqstackoptr *s)

71return *(s->top-1

);72

}73 elemtype gettopopnd(sqstackopnd *s)

77return *(s->top-1

);78}79

80//

入棧81

int pushoptr(sqstackoptr *s,selemtype e)

88 *s->top++ =e;

89return

ok;90}91

int pushopnd(sqstackopnd *s,elemtype e)

98 *s->top++ =e;

99return

ok;100

}101

102//

刪除棧中的元素

103int popoptr(sqstackoptr *s,selemtype *e)

108int popopnd(sqstackopnd *s,elemtype *e)

113114

//銷毀棧

115int destorystackoptr(sqstackoptr *s)

122int destorystackopnd(sqstackopnd *s)

129//

判斷輸入的字元是不是運算子

130 elemtype in(char c,char

op)

137}

138if(f==0) return0;

139else

return1;

140}

141//

比較運算子優先順序

142 selemtype precede(char topc,char

c) else

149}

150151

if (topc=='

*'||topc=='/'

) else

157}

158159

if (topc=='('

) else

165}

166167

if (topc==')'

) 170

171if (topc=='#'

) else

177}

178179

}180

181elemtype operate(elemtype a,selemtype theta,elemtype b)

196}

197//

求表示式的值

198 elemtype evaluateexpression(sqstackoptr *optr,sqstackopnd *opnd) ;

203initstackoptr(optr);

204initstackopnd(opnd);

205 pushoptr(optr,'#'

);206 printf("

請輸入表示式:");

207 c =getchar();

208while(c!='

#'|| gettopoptr(optr)!='#'

) else

229}

230}

231return

gettopopnd(opnd);

232}

233int

main()

234

資料結構 表示式求值

一 實驗目的 通過乙個具體實際應用例子,加深對資料結構課程的理解,能夠綜合利用資料結構以及c語言的知識設計程式,應用到實際問題中去。二 實驗題目 常見的小型計算器可以通過輸入乙個由運算元和操作符組成的表示式計算出結構,設計乙個程式模擬上述功能。本實驗要求至少建立兩個棧和乙個運算子優先順序比較表,按照...

資料結構 表示式求值

題目鏈結 題目描述 給出乙個表示式,其中運算子僅包含 加 減 乘 整除 乘方 要求求出表示式的最終值。資料可能會出現括號情況,還有可能出現多餘括號情況。資料保證不會出現大於或等於2 31 231的答案。資料可能會出現負數情況。輸入格式 輸入僅一行,即為表示式。輸出格式 輸出僅一行,既為表示式算出的結...

資料結構 表示式求值 1

在乙個表示式中,只有 0 9 請求出表示式的值。用整數除法 輸入格式 共1 行,為乙個算式。算式長度 30 其中所有資料在 0 2 31 1的範圍內 輸出格式 共一行,為表示式的值。輸入樣例 在這裡給出一組輸入。例如 1 3 2 7 2 69 2 輸出樣例 在這裡給出相應的輸出。例如 include...