程式**如下:
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...