棧的應用 算術表示式求值

2021-10-01 09:57:42 字數 1645 閱讀 3960

算術表示式中可以包含+,-,,/,(,)這6個運算子,要計算的表示式以字串行的形式在程式執行時輸入。為了便於實現,規定:(1) 每個表示式均以字元#開始,以#號結束,(例如,#23(13+8)-76+100# ),表示式中不能出現數字和運算子外的其它字元(空格也不行);(2)表示式中的運算數只能是非負整數;(3)輸入的表示式都是合法的。

編寫程式,完成輸入乙個合法的算述表示式,輸出其運算結果。(例如,#23(13-8)-7*6+100#,則輸出: 173)

演算法思想:

(1)函式in(l,c):判斷c是否為運算子

(2)函式precede(t1,t2):

(3)函式operate(a,theta,b):對a和b進行二元運算theta,返回運算結果。 

(4)程式中還要有分離整數(運算元)的程式段,本實驗要求是非負整數。

注意!!!

#include

"stdio.h"

#include

"stdlib.h"

#define maxsize 100

#define error 0

#define ok 1

/*typedef structsqlist;*/

typedef

struct

sqstack;

intinitstack

(sqstack &s)

intpush

(sqstack &s,

int x)

intpop

(sqstack &s,

int&x)

int gettop (sqstack s)

intin

(char c)

;for

(i =

0;i <

7;i++)if

(c == a[i]

) j =1;

return j;

}char

precede

(char c1,

char c2),,

,,,,

,};switch

(c2)

switch

(c1)

return a[x]

[y];

}int

operate

(int a,

char theta,

int b)

return count;

}int

destroystack

(sqstack &s)

intmain()

else

push

(opnd, sum)

;//將結果入棧

sum =0;

//重置sum

}}

s=gettop

(opnd)

;destroystack

(opnd)

;//銷毀棧

destroystack

(optr)

;printf

("%d\n"

,s);

return ok;

}

棧的應用 算術表示式求值

選擇棧作為資料結構,所以所有操作都要圍繞棧的特點來進行。因為先入棧而被壓在下面的意味著要後處理,所以優先順序低的不能壓著優先順序高的而入棧。對於同級的操作符,因為要按照從左往右的運算規則,所以也不 能壓著同級的操作符而入棧。簡單來說,與棧頂的操作符比較,優先順序高的則入棧,否則操作符出棧作相應運 算...

算術表示式求值 棧的應用

注 實驗用書為 資料結構 c語言版 第2版,人民郵電出版社出版。實驗題目 學生管理系統的設計與實現 實驗環境 visual c 6.0或其他c 環境 一 實驗目的 1 掌握棧的定義及實現 2 掌握利用棧求解算術表示式的方法。二 實驗內容 通過修改完善教材中的演算法3.4,利用棧來實現算術表示式求值的...

棧的應用之算術表示式求值

1 2 3 4 此算術表示式由一些操作符和運算元組成。其中,操作符有 等,運算元有 1 2 3 等。對於操作符來說,其運算是有優先順序的。比如,上述表示式中,3 4應該先進行操作,將得到的結果再與2相乘。算符間的優先關係如下 運算子 根據算符間的優先關係表,使用兩個棧。乙個棧為optr,儲存運算子,...