使用棧完成表示式的計算:
思路:通過乙個index值來遍歷表示式
如果掃瞄到的是乙個數,直接入數棧
如果掃瞄到的是乙個符號,分如下情況:
1:如果符號棧為空,直接入棧
2:如果符號棧有操作符,進行比較,如果當前操作符的優先順序小於或等於棧頂元素的優先順序,則從數棧中取出兩個數,再從符號棧中將棧頂元素pop出,得到結果,再將結果入數棧。若當前操作符大於棧頂元素的操作符,則直接入符號棧。
當表示式掃瞄完,就順序從數棧和符號棧pop出相應的數與符號
最後在數棧中只有乙個數,即為結果
**:
public static void main(stringargs) else else
}}else else}}
//讓index + 1, 並判斷是否掃瞄到expression最後.
index++;
if (index >= expression.length())
}while(true)
num1=stack1.pop();
num2=stack1.pop();
oper =stack2.pop();//操作符
res = stack1.cal(num1, num2, oper);
stack1.push(res);//將結果入棧
}//輸出結果
int number=stack1.pop();
system.out.println(expression+"的結果為"+number);
}}class stack3
//增加乙個方法,可以返回當前棧頂的值, 但是不是真正的pop
public int peek()
// 棧滿
public boolean isfull()
// 棧空
public boolean isempty()
// 入棧
public void push(int number)
top++;
array[top] = number;
} // 出棧
public int pop()
int number = array[top];
top--;
return number;
} // 遍歷棧,顯示
public void list()
for (int i = top; i>= 0; i--) }
//運算子的優先順序自定義,數字越大,優先順序越高
public int priority(int oper) else if(oper=='+'||oper=='-') else }
//判斷是不是乙個運算子
public boolean isoper(char val)
//計算方法
public int cal(int num1,int num2,int oper)
return val;
}
大資料學習第七天
今天開始學習spark核心程式設計之高階特性 1 基於排序機制的wordcount程式 2 二次排序 其實就是根據多個字段排序,sort by a,b,c 3 topn 1 對於第乙個問題,其實就是如何把 a 1 b 3 類似的pair結構的資料排序,由於只有sortbykey沒有sortbyval...
學習python的第七天
本節的學習是同時使用argv和raw input向使用者提示一些特別的問題。下一節學習讀寫檔案,這節練習是下一節的基礎,所以得研究清楚。下邊的練習使用raw input打出簡單的 作為提示符,提示使用者輸入。在書中說明這節學習的方式和zork或adventure兩款遊戲類似。zork 練習部分 fr...
學習linux的第七天
這兩個檔案是linux系統中最重要的檔案之一。在linux系統裡輸入cat etc passwd head 如下圖 第乙個欄位為使用者名稱,它代表使用者賬號的字串。第二個字段存放的是該賬號的口令。這裡為什麼是x呢?早期的unix系統口令確實存放在這裡,但基於安全因素,後來就存放在 etc shado...