資料結構棧之中綴表示式求值(實現計算器綜合計算)

2021-10-02 16:52:48 字數 2389 閱讀 7777

一、思路分析:

1、通過乙個index值(索引),來遍歷我們的表示式。

2、如果我們發現是乙個數字,就直接入數棧。

3、如果發現掃瞄到是乙個符號,就分如下情況:

(1)、如果發現當前的符號棧為空,就直接入棧。

(2)、如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於棧中的操作符,就需要從數棧中pop出兩個數,在從符號棧中pop出-乙個符號,進行運算,將得到結果,入數棧,然後將當前的操作符入符號棧;如果當前的操作符的優先順序大於棧中的操作符,就直接入符號棧。

4、當表示式掃瞄完畢,就順序的從數棧和符號棧中pop出相應的數和符號,並執行。

5、最後在數棧只有乙個數字,就是表示式的結果。

二、**實現:

1、先實現一位數的運算

2、擴充套件到多位數的運算

具體**如下:

package com.ycx.stack;

public

class

calculator

else

}else

}else

else}}

//讓 index+1 ,判斷是否掃瞄到expression最後

index++;if

(index >= expression.

length()

)}/*當表示式掃瞄完畢,就順序的從數棧和符號棧中pop出相應的數和符號,並執行*/

while

(true

) num1 = numstack.

pop();

num2 = numstack.

pop();

oper = operstack.

pop();

res = numstack.

cal(num1,num2,oper)

;//運算結果入棧

numstack.

push

(res);}

//最後輸出結果

int res1 = numstack.

pop();

system.out.

printf

("表示式結果 %s = %d"

,expression,res1);}

}//先建立乙個棧

//定義乙個arraystack1 表示棧

class

arraystack1

//1、判斷棧滿

public

boolean

isfull()

//2、判斷棧空

public

boolean

isempty()

//3、入棧 push

public

void

push

(int val)

top++

; stack[top]

= val;

}//4、出棧 pop

public

intpop()

int val = stack[top]

; top--

;return val;

}//5、顯示棧(遍歷棧): 需要從棧頂開始遍歷

public

void

print()

//從棧頂開始

for(

int i = top; i>=

0; i--)}

//6、判斷符號的優先順序(優先順序由我們自己決定)

//可用數字表示優先順序:數字越大,優先順序越高

public

intpriority

(int oper)

else

if(oper ==

'+'|| oper ==

'-')

else

}//7、判斷是不是乙個運算子

public

boolean

isoper

(int val)

return

false;}

//8、計算

public

intcal

(int num1,

int num2,

int oper)

return res;

}//9、增加乙個方法,可以返回當前棧頂的值(不是pop)

public

intpeek()

}

執行結果如下:

資料結構 6 棧的應用之中綴表示式求值

參考書籍 資料結構 c語言版 嚴蔚敏 吳偉民編著 清華大學出版社 分析 設操作符棧op棧 運算元棧num棧 op棧裡不可能出現 只可能有 設ch為當前字元,假設輸入都是合法的 1.ch為 則op棧頂為 時ch入棧,否則進行運算直至op棧頂為 2.ch為 則op棧頂為 時ch入棧,否則op棧頂為 此時...

資料結構棧之中綴表示式轉字尾

對於乙個中綴表示式,假設a b a b 我們對它從左至右進行遍歷,當遇到運算元時直接輸出 當遇到操作符且棧為空時,將操作符壓入棧 當遇到左括號時,將其入棧 當遇到右括號時,將棧中左括號上面的元素依次出棧並輸出,最後將左括號出棧 但不輸出 當遇到操作符時 此時棧非空 當棧頂元素也為操作符且優先順序大於...

資料結構 棧實現表示式求值

expression.h calc expression 功能 利用棧實現整數表示式求值 輸入 表示式字串 輸出 求值結果 日期 2018 04 05 ifndef expression h define expression h include include include include 將中...