棧實現綜合計算器(中綴)

2021-10-09 03:39:02 字數 2160 閱讀 3537

思路分析:

對於乙個表示式,有數字,有符號,因此我們需要建立兩個棧。乙個數棧:用於存放數字;乙個符號棧:用於存放符號。

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

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

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

3.1如果發現當前的符號棧為空,就直接入棧

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

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

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

**實現:

第一步:建立棧以及包含的方法。

public

class

arraystack

//增加乙個方法,返回棧頂的值,但不會出棧

public

intpeek()

//判斷棧滿

public

boolean

isfull()

//判斷棧空

public

boolean

isempty()

//入棧

public

void

push

(int value)

top++

; stack[top]

= value;

}//出棧

public

intpop()

int value = stack[top]

; top--

;return value;

}//遍歷棧,遍歷時,需要從棧頂顯示資料

public

void

list()

for(

int i = top;i>=

0;i--)}

//返回運算子的優先順序,優先順序由我們來確定,優先順序用數字表示

public

intpriority

(int oper)

else

if(oper ==

'+'|| oper ==

'-')

else

}//判斷是不是運算子

public

boolean

isoper

(char val)

//計算方法

public

intcal

(int num1,

int num2,

int oper)

return res;

}}

第二步:建立主方法,實現表示式的計算:

public

class

calcuator

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)

;// 入棧

}// 將數棧的最後數,pop出來

system.out.

printf

("表示式%s = %d\n"

,expression,numstack.

pop())

;}}

棧實現綜合計算器

package com.dai.stack public class calculator else else else else index 1 是否掃瞄到最後 index if index expression.length while true num1 numstack.pop num2 n...

棧實現綜合計算器

思路分析 實現 package stack public class calculator else else else else 讓index 1,並判斷是否掃瞄到expression最後 index if index expression.length while true num1 numst...

棧實現綜合計算器(中綴表示式)

定義兩個棧,乙個數字棧 numstack 乙個符號棧 operstack 我們定義乙個index來遍歷我們的表示式 定義乙個keepstring key幫助我們拼串 如果發現key是乙個數字,此時判斷key 的下乙個元素是不是數字,繼續向後遍歷,直到key的下乙個元素不是數字時,將integer.p...