中綴表示式是最自然、最易被人類理解的表達方式,但是計算機處理起來並不顯得方便,這時,字尾表示式就發揮作用了
例如:計算表示式(a + b) * (c + d)的值,程式裡需要不斷的判斷運算子的優先順序,先計算括號裡的子表示式
假如我們將上述表示式轉換為字尾表示式:a b + c d + *,你會發現現在是不需要括號了
這時我們只需要掃瞄表示式,碰到資料就入棧,碰到運算子就出棧兩個資料,計算完成之後將結果再入棧,最後棧中儲存的是表示式的最終結果
這就是字尾表示式的用途之一
本演算法只完成中綴表示式到字尾表示式的轉換,且假設表示式中只會出現空白符 資料 + - * /四種運算子和括號,棧作為輔助工具
#include #include #define max 100
#define push(stk, val) stk->data[stk->size++] = val
#define pop(stk) stk->data[--stk->size]
#define top(stk) stk->data[stk->size - 1]
#define empty(stk) stk->size == 0
#define init(stk) stk->size = 0
struct stack
;void convert(char *exp)
push(pt, exp[i]);
break;
case '*':
case '/':
if (!empty(pt) && (top(pt) == '*' || top(pt) == '/'))
push(pt, exp[i]);
break;
case '(':
push(pt, exp[i]);
break;
case ')':
while (!empty(pt) && top(pt) != '(')
pop(pt);
break;
default:
str[j++] = exp[i];
break;
} ++i;
} while (!empty(pt))
str[j] = '\0';
strcpy(exp, str);
}int main(void)
表示式轉換 中綴表示式轉換為字尾表示式
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
中綴表示式轉換為字尾表示式
今天我們課前談一談,要說點什麼好呢?最近小甲魚發現,很多魚油在學習資料結構和演算法的時候積極性已經開始有點下降了。甚至很多朋友懷疑資料結構和演算法到底有沒有用?實話說,在大廈的防震設計 消除疾病 防止水源枯竭這些實際問題中,很遺憾,資料結構和演算法幾乎起不到任何直接作用。那為什麼我們要學呢?很簡單,...
中綴表示式轉換為字尾表示式
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...