棧實現表示式計算

2021-09-25 15:35:56 字數 1741 閱讀 2643

// 讓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);}

// 輸出結果

system.out.

println

("表示式"

+ expression +

"="+ numstack.

pop());}}

package com.pro.stack;

public

class

calculatorstack

//棧滿

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

intpeek()

//遍歷棧

public

void

list()

for(

int i = top; i >=

0; i--)}

//返回運算子的優先順序,優先順序有程式設計師確定.優先順序使用數字表示,

//數字越大,則優先順序越高

public

intprioty

(int oper)

else

if(oper==

'+'||oper==

'-')

else

}//判斷是不是元素符

public

boolean

isoper

(char ch)

//計算方法

public

intcal

(int num1,

int num2,

int oper)

return res;

}}

棧實現表示式計算

原理 數 入棧 入棧 運算子出棧,直到 和 匹配 運算子 當前符優先順序 棧頂符優先順序 入棧 當前符優先順序 棧頂符優先順序 棧內運算子出棧,運算後進棧,再比較 其中 優先順序大於 如下 先建compute.h標頭檔案 pragma once double compute char str 計算 ...

棧實現表示式的計算

之前寫過這個的部落格,但是覺得不太好,都是截圖,所以我就趁有時間整理了一下。結果發現了乙個天大的低階錯誤。我在實現棧的時候把析構函式寫錯了 首先,執行的時候答案是對的,但是是記憶體錯誤表現 然後我就進行單步除錯 一直執行到最後一句 也沒有錯誤,直到最後乙個大括號就出現了.所以說明可能是出現了記憶體洩...

用棧實現表示式計算

public class calculator public static inthandle string express else else else else int num integer.parseint keepnum keepnum numstack.push num index if...