最近在學習演算法時候,看到乙個雙棧算術表示式求值演算法,挺啟發我的;平常大家在寫**的時候要寫表示式的時候,基本都是直接 (1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) );這樣程式會幫你的自動計算出結果,大家有沒用想過這程式是如何一步一步計算並得出你需要的值,今天講乙個簡單例子,可以幫助大家很好的了解雙棧算術表示式求值演算法是什麼。
首先,為了簡單化的解釋該演算法,我們定義乙個未省略括號的表示式:(1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )雙棧算術表示式求值演算法是由e.w.dijkstra在上個世紀60年代發明的乙個很簡單的演算法,用兩個棧【乙個用來儲存運算子、乙個用來儲存運算元】來完成對乙個表示式的運算。其實整個演算法思路很簡單:
(這個是《演算法 第四版》裡面的演算法軌跡圖,感覺很生動形象)
public
class
mydijkstraalgorithm
public
static
void
dijkstraalgorithm (string str)
nums.push(num);
break;
default:
nums.push(double.parsedouble(character.tostring(s)));
break;}}
system.out.println(nums.pop());}}
這個演算法雖然看起來實用性不大,但是它充分利用了棧的特性,執行效率也比較高,我可以學習它的思路,把一些比較複雜的問題給簡化了; 棧的應用 算術表示式求值
選擇棧作為資料結構,所以所有操作都要圍繞棧的特點來進行。因為先入棧而被壓在下面的意味著要後處理,所以優先順序低的不能壓著優先順序高的而入棧。對於同級的操作符,因為要按照從左往右的運算規則,所以也不 能壓著同級的操作符而入棧。簡單來說,與棧頂的操作符比較,優先順序高的則入棧,否則操作符出棧作相應運 算...
算術表示式求值 棧的應用
注 實驗用書為 資料結構 c語言版 第2版,人民郵電出版社出版。實驗題目 學生管理系統的設計與實現 實驗環境 visual c 6.0或其他c 環境 一 實驗目的 1 掌握棧的定義及實現 2 掌握利用棧求解算術表示式的方法。二 實驗內容 通過修改完善教材中的演算法3.4,利用棧來實現算術表示式求值的...
算術中綴表示式求值(棧實現)
問題描述 輸入由整型分量和操作符組成的中綴表示式,輸出其字尾表示式和運算的結果。整型分量 十進位制數。操作符 如輸入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...