思路分析
利用棧這個資料結構先入後出的特點。利用兩個棧乙個數字棧,乙個符號棧。實現計算。
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.從...