學習資料結構的第七天 用棧完成表示式求值

2021-10-07 08:35:40 字數 1504 閱讀 5074

使用棧完成表示式的計算:

思路:通過乙個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...