題目:[nyoj-257]
主要是需要一個操作符棧,對于操作數而言直接輸出就行。 對于操作符棧,大致的規則很簡單,就是如果當前元素優先級高于棧頂優先級,棧頂出棧。直到當前元素的優先級高于棧頂或者是棧為空,入棧。 最后。將棧中元素挨個出棧,附加到尾部即可。
整體思路不難,比較麻煩的是對于對于操作符的優先級。
主要是左右括號在棧外和棧內的優先級不同導致。同一級別的操作符,先入棧的優先級高。對于同一級別的優先級,一定要遵循“同一優先級,從左到右計算” 比如,1-2+3,如果從右向左計算 1 - (2+3)=-4,主要是操作數入棧我們默認的都是正數。所以,這么做會丟失負號。 必須嚴格按照從左到右的計算順序。
規則按照當前不同元素來進行劃分:
當前元素是操作數,直接輸出。當前元素是操作符,執行如下操作: 當前元素是左括號,優先級最高,直接進棧。當前元素是右括號,優先級最低,棧頂元素出棧直到遇見左括號。同時消去。只有這種情形,當前元素是不入棧的當前元素是其余操作符 棧頂是左括號,當前操作符直接進棧。(之所以需要判斷是因為,我只個+-*/四個字符給了優先級)如果當前元素優先級大于棧頂,入棧。否則,棧頂輸出直到當前元素優先級大于棧頂或者棧為空。最后將棧里元素全部輸出。新聞熱點
疑難解答