在小學的運算中,我們經常接觸到的數學表示式,它的規則也就是老生常談的了-"先乘除,後加減,從左到右,先括號後括號外",但後來出現的四則運算,則要求優先順序,計算更加複雜,而計算機解決這種問題的方法就是利用棧,這就引入了字尾表示式
字尾表示式的基本概念:
字尾表示式也叫逆波蘭表示式,是一種不需要括號的字尾表示式(rpn),所有的運算符號都在數字的後面.
eg: 12 3 4 + * 6 - 8 2 / +
字尾表示式的求解規則:
(1).從左到右遍歷表示式的每個數字和符號,遇到數字就進棧,遇到符號就將處於棧頂的兩個數字出棧,進行相應的運算,運算結果再次進棧,最終棧頂的元素就是最終的計算結果
(2).當遇到符號將棧頂的兩個數字出棧,先出棧的是右運算元,後出棧的為左運算元
就好像拿到武功秘籍一樣,那仫具體情況如何呢?請看下圖分析:
在知道了字尾表示式的求解之後,中綴表示式如何轉為字尾表示式呢?
中綴表示式轉字尾表示式的規則:
從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出;若是符號,則需要判斷該符號與棧頂元素的優先順序,如果是右括號或者優先順序不高於棧頂符號(乘除優先加減),則棧頂元素依次出棧並輸出,並將當前符號進棧,一直到輸出最終字尾表示式為止
待續...
棧的應用之後綴表示式求值
字尾表示式,指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行 不再考慮運算子的優先規則 我們數學上採用的表示式叫中綴表示式,即將運算放在兩個運算物件中間。此外還有字尾表示式,即將運算子放在兩個運算物件的前面。下面是同乙個算術表示式的三種等價表示形式 中綴...
棧應用之 字尾表示式計算 (python 版)
字尾表示式特別適合計算機處理 中綴表示式 3 5 6 17 4 3 17 4 6字首表示式 3 5 6 17 4 3 17 4 6字尾表示式 3 5 6 17 4 3 17 4 6 假定 st 是乙個棧 棧的特點 後進先出 lifo 比如 3 5 即 3 5 3 先壓入棧,而後 5 出棧 元素在棧裡...
棧的應用之求解算術表示式
以前是怎麼處理算術表示式的?好像都是自己瞎yy的 最近資料結構學到棧的應用才發現,對於算術表示式有非常正規的處理方法 棧處理 書上用的偽 於是我偷偷自己實現了該演算法,發現書上其實是有bug的 書上的算術表示式沒有考慮十位以上的數,即預設算術表示式中的數都是個位數。於是自己加了數的處理 為什麼算術表...