學習2 表示式求值問題

2021-10-22 16:35:05 字數 2886 閱讀 2877

總結對於乙個表示式(例如:(5-2)*3)的問題,需要考慮到字元之間的優先順序,對於上述問題的求解有很多種,例如,變更為字尾表示式:52-3×;字首表示式等。

本文採用最為簡單的求解方案

問題式樣:2×(2+6/3)-2+1

從左向右將表示式字元乙個個讀入棧中,數字放入數字棧(opnd),字元放入符號棧(optr)

先在optr中存入『#』

再存入第乙個字元『2』,為數字,壓入opnd

下乙個字元『×』(『*』)

壓入入符號棧的原則是,待存入字元的優先順序比棧頂高,進行壓棧操作;如果待存入字元的優先順序比棧頂低,將棧頂字元取出,再從數字棧中取頭兩個數字進行相應的運算,計算結果壓入數字棧中,再將一開始帶存入字元與字元棧棧頂的元素進行優先順序的比較…

頂欄表示待壓入字元,左欄表示棧頂字元

』>『表示,待壓入字元優先順序小;』

字元『*』的優先順序比『#『高,壓入optr

下乙個字元』(『比』*『的優先順序高,壓入optr

'2』壓入opnd

下乙個字元『+』,優先順序高,壓入optr

數字6,壓入opnd

『/』,壓入optr

數字3,壓入opnd

字元『)』,優先順序低

將opnd的頭兩個數字(3和6)取出,和optr棧頂元素(』/『)進行運算

6/3=2

將運算結果壓入opnd

再將『)』,與『+』進行比較,優先順序低,重複

再將『(』,與『)』進行比較,優先順序相等,『)』出棧

『-』的優先順序比『*』低,重複

再將『-』與『#』進行比較,優先順序高,壓入optr

數字2壓入opnd

'+'優先順序比『-』低

『+』優先順序比『#』高,壓棧optr

數字1,壓棧opnd

最後乙個字元『#』,優先順序低

『#』與『#』優先順序相等,出棧

無字元,結果從opnd出棧,為5

**如下(示例):

struct stack* optr =

null

;struct stack* opnd =

null

; optr=

creatstack()

;push_stack_node

(optr,

'#')

; opnd=

creatstack()

;char ch =0;

ch =

getchar()

; stack_data_type theta =0;

stack_data_type a =0;

stack_data_type b =0;

while

(ch !=

'#'||

get_top

(optr)

!='#'

)else

switch

(precede

(get_top

(optr)

, ch,optr))}

stack_print

(*opnd)

;

**如下(示例):

intin(

char ch)

;int i =0;

for(i =

0; i <

sizeof

(arr)

; i++

)return0;

}

char

precede

(stack_data_type t1, stack_data_type t2,

struct stack* optr)

return f;

}

int

operate

(stack_data_type a, stack_data_type theta, stack_data_type b)

}

對於乙個表示式求值,從左至右將字元取出,如果是數字,放入數字棧中,如果是符號,放入符號棧中;

放入符號棧中有一定的原則,優先順序高的壓棧,優先順序低的,從符號棧**棧乙個符號,再從數字棧**棧兩個數字,進行相應的運算,再將結果壓入數字棧中;

最終得到乙個空的符號棧和乙個只有乙個數的數字棧,

將數字棧的最後乙個數字出棧,即為所求結果。

表示式求值問題

這是清華大學鄧俊輝資料結構 c 中的乙個案例,通過使用棧這種資料結構,完成了較為複雜的表示式求值問題,以下 是我整理改編而成,能夠完成加減乘除,乘方 階乘的運算,以及括號的處理。在這裡,我使用到了c stl 中的容器stack。include include include include incl...

表示式求值問題之表示式樹

include include include include define m 1005 define clr arr,now memset arr,now,sizeof arr using namespace std stackshu typedef struct node tire,t cha...

表示式求值的問題

include include include define false 0 define true 1 define error 0 define ok 1 define overflow 1 typedef int status stack typedef char selemtype defi...