棧應用 四則運算

2021-10-24 04:02:27 字數 1951 閱讀 1857

輸入字串格式的算術表示式,如: 「3+2*」;輸出去結果。

棧的應用;

四則運算分為下列四個過程

讀取字串 (並不是簡單地讀入,比如 當字串中有兩位數,例如12時,我們應該讀成 「12」而不是「1」,「2」,不然運算會出現錯誤)。

處理字串,給字串加0 (為了保證字尾運算的正常執行,需要對出現的負數進行考慮。 例如 (-4 + 3) 為了運算正確,將其處理成(0 - 4 +3))

將中綴表示式轉化成字尾表示式

計算字尾表示式

public

class

main",

")")

; s = s.

replaceall

("\\]"

,")");

char

chars = s.

tochararray()

;// 讀取字串

list

all =

newarraylist

<

>()

;int len = s.

length()

;int i=0;

while

(iif(offset !=0)

else

}// 給字串加 0

list

list =

newarraylist

<

>()

;for

(int j=

0; jsize()

; j++

)else}}

list.

add(all.

get(j));

} list

postexpre =

getpostexpre

(list)

; system.out.

println

(caculate

(postexpre));

}// 將中綴表示式轉為字尾表示式

public

static list

getpostexpre

(list

list)

else

if(tmp.

equals

("("

)|| tmp.

equals

("*"

)|| tmp.

equals

("/"))

else

if(tmp.

equals

(")"))

else}}

else

if(tmp.

equals

("+"

)|| tmp.

equals

("-"))

else

else

} ops.

push

(tmp);}

}}for(

int j=ops.

size()

-1; j>=

0; j--

)return post;

}// 計算字尾表示式

public

static

intcaculate

(list

post)

else

else

if(tmp.

equals

("-"))

else

if(tmp.

equals

("*"))

else

if(tmp.

equals

("/"))

vals.

push

(val);}

}return vals.

pop();

}}

棧的應用 簡單四則運算

思想 我們平時輸入的四則運算表示式,例如 9 3 1 2,屬於中綴表示式。我們需要將它轉換成字尾表示式 9 3 1 2 的形式求值。其中需要兩個棧 數字棧和運算子棧。過程 逐個讀取中綴表示式 char型 9 3 1 2 1.如果是數字則壓入數字棧 如果是大於一位的數字則需要寫個函式轉換成int型 2...

棧的應用 四則運算 c

四則運算主要分為兩個部分 中綴轉字尾 規則為 先遍歷中綴表示式的每乙個字元,如果是數字直接輸出到字尾表示式,如果是符號,需要判斷與棧頂符號的優先順序,是右括號或者優先順序高於棧頂符號 乘除優先於加減 則依次輸出出棧並輸出,然後將當前符號壓入棧。這裡把符號分為幾類 入棧 棧頂符號依次出棧並輸出直到棧頂...

棧的實際應用 四則運算

四則運算 計算機在進行運算過程會先將中綴轉成字尾進行計算。中綴表示式 9 6 3 8 4 字尾表示式 96 3 84 中綴轉字尾規則 借助輔助棧,遇到數字或字母,列印 遇到符號,將當前符號與棧頂符號進行優先順序比較。如果當前符號優先順序高,則直接入棧,如果當前符號優先順序較低,則將棧頂元素依次出棧,...