java 棧實現中綴表示式求值

2021-09-24 23:00:12 字數 1403 閱讀 3738

思路分析

利用棧這個資料結構先入後出的特點。利用兩個棧乙個數字棧,乙個符號棧。實現計算。

1.遍歷表示式的每個字元,如果是數字就入數棧。注意數字可能是多位數,所以在讀數字是要合併一下連續的數字,知道下個符號出現。

2.讀到的是符號時,先判斷符號棧是否為空,如果為空就直接入符號棧。如果不為空則判斷優先順序,如果棧中大於當前,將棧中符號彈出,進行預算,再把當前符號入棧,如果當前大於棧中,直接入棧。

3.運算時,從數棧**兩個數,符號棧**乙個符號。運算,直到棧中僅剩乙個數,符號棧為空。此時數棧中的數即為結果

**:

package edu.xalead;

class arraystack1

//判斷棧滿

public boolean isfull()

//判斷棧空

public boolean ifemty()

//入棧

public void push(int val)

top++;

stack[top]=val;

}//出棧

public int pop()

int val=stack[top];

top--;

return val;

}//遍歷棧

public void show()

for (int i=top;i>=0;i--)

}public int youxianji(char c)else if(c=='+'||c=='-')else

}//返回棧頂元素

public int peek()

//判斷是否是符號

public boolean isoper(char c)

//比較符號的優先順序

public int yunxuan(int num1,int num2,char c)

return rec;

}}public class test6用棧實現表示式求值 else

} else

}else else }}

index++;

if (index>=biaodashi.length())

}while (true)

num1 = numstack.pop();

num2 = numstack.pop();

opee = (char) operstack.pop();

rec = numstack.yunxuan(num1, num2, (char) opee);

numstack.push(rec);

}system.out.println(biaodashi+"="+numstack.pop());

}}

算術中綴表示式求值(棧實現)

問題描述 輸入由整型分量和操作符組成的中綴表示式,輸出其字尾表示式和運算的結果。整型分量 十進位制數。操作符 如輸入3 5 8 2 7,輸出 3 5 8 2 7 結果是10 輸入3 1 4 7 3 輸出 3 1 4 7 3 結果是 18.75 輸入3 4 5 5 7 4,輸出 3 4 5 5 7 4...

中綴表示式求值

中綴表示式用於計算乙個表示式,比如計算器 就是這樣實現的 這兒是用棧的資料結構來實現的。首先輸入乙個字串,表示乙個表示式,然後用乙個棧儲存數字,另外乙個棧儲存符號 如果當前運算子優先順序比棧頂元素優先順序高,則入棧,若當前運算子優先順序小於等於棧頂運算子優先順序,則從數字棧中彈出兩個元素,從符號棧中...

中綴表示式求值

表示式求值都需要2個棧。乙個是符號棧,另乙個是數字棧。拿上面的字尾式45 來說,咱們剛才將表示式從4 5轉換到45 的過程是咱們一眼就能看出來的,但是計算機不能像咱們這樣做,因為他不會。他只會從表示式的開頭,順序掃瞄表示式的每乙個字元,它不能像咱們一樣 一眼就 看 出來。計算機是如何轉換的呢?1.從...