使用棧來完成乙個表示式的結果

2021-10-21 01:58:46 字數 2445 閱讀 7074

7*2*2-5+1-5+3-4 = ?

3+2*6-2

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-xzpnjzre-1614845779689)(

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

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

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

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

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

驗證: 3+2*6-2 = 13

package com.atguigu.stack;

/** * classname:

* description:

* date: 2021-02-20 14:02

* @project data_algorithm

* @package com.atguigu.stack

*/public

class

calculator

//先建立乙個棧,直接使用前面建立好

//定義乙個 arraystack2 表示棧, 需要擴充套件功能

class

arraystack2

//增加乙個方法,可以返回當前棧頂的值, 但是不是真正的pop

public

intpeek()

//棧滿

public

boolean

isfull()

//棧空

public

boolean

isempty()

//入棧-push

public

void

push

(int value)

top++

; stack[top]

= value;

}//出棧-pop, 將棧頂的資料返回

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

static

void

main

(string[

] args)

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出,就是結果

int res2 = numstack.

pop();

system.out.

printf

("表示式 %s = %d"

, expression, res2)

;}

使用棧完成表示式的計算

使用棧完成表示式的計算思路 1 通過乙個index值,來遍歷我們的表示式 2 如果我們發現是乙個數字,就直接入數棧 3 如果掃瞄到的是乙個符號,就分如下情況 3.1 如果發現當前的符號棧為空,就直接入棧 3.2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者 等於棧中的操作符,就...

使用棧完成中綴表示式轉字尾表示式

字尾表示式也稱為逆波蘭表示式。求字尾表示式的過程有很多種,這裡給出利用棧實現的過程。現代編譯器不會直接將算術表示式轉化成機器層的 而是使用乙個中間形式,成為字尾表達法。在字尾表示式中,運算子緊隨在它的運算元的後面,例如,給出中綴表示式a b它的字尾形式就是ab 對於a b c,字尾形式就是abc 說...

棧的乙個應用表示式求值

棧的乙個應用表示式求值 寫者 顏清國 06.3.20 include stdio.h include string.h define max 100 typedef struct sstack stack 入棧操作 void push stack ta,char p 出棧,返回棧頂的值 char p...