棧的應用 (中綴表示式 轉 字尾表示式)

2021-07-24 23:55:44 字數 1741 閱讀 9082

中綴表示式、字尾表示式,都是用來呈現運算表示式的一種方式。

標準表示式:4+5+(6*7)

中綴表示式,就是標準的表示式,即4+5+(6*7)

字尾表示式,符號在後的表示式,即4 5 + 6 7 *

中綴表示式字尾表示式思想是(注意的是:只有( + - * /這5種符號才會入棧)

1. 讀到運算元時,立即輸出

2. 讀到的是操作符,分以下情況處理

+ 如果是(,入棧

+ 如果是),彈出棧中符號,直到彈出的是(

+ 如果是+-,依次彈出棧中所有符號(直到棧頂是(,彈出結束),最後將+-入棧

+ 如果是*/,依次彈出棧中所有符號(直到棧頂是*或者/,彈出結束),最後將+-入棧

3. 如果讀到結尾,棧還是不為空,則依次彈出棧中所有符號

4. 步驟2和3中所有的彈出操作,除了(,都要輸出顯示,最後輸出的結果就是字尾表示式

**實現如下

(下面的**有呼叫到乙個api(profix_expression_in),這個api是跟根據字尾表示式來計算表示式的結果,詳見棧的應用—(字尾表示式),另外棧的基本實現,詳見棧的實現(鍊錶方式))

#include 

#include

#include

#include

#include "stack.h"

bool infix_to_profix_is_number(char str)

void infix_to_profix_is_symbol(stack * inputstack, stack * outputstack, char str)

else

if(')' == str)

stack_pop(inputstack); // pop ')'

}else

if('+'==str || '-'==str)

stack_push(inputstack, str);

}else

if('*'==str || '/'==str)

stack_push(inputstack, str);

}}void infix_to_profix_read(stack * inputstack, stack * outputstack, char * str)

else

}p = p + 1;

}while(true != stack_is_empty(inputstack))

}void infix_to_profix_main_test(void)

輸出效果如下

棧的應用 中綴表示式轉字尾表示式

有關棧api詳情請參看我的另一篇博文 棧的鏈式儲存 api實現 例項 5 4 5 4 1 2 3 1 2 3 8 3 1 5 8 3 1 5 中綴表示式符合人類的閱讀和思維習慣 字尾表示式符合計算機的 運算習慣 中綴轉字尾演算法 遍歷中綴表示式中的數字和符號 對於數字 直接輸出 對於符號 左括號 進...

棧的應用 中綴表示式轉字尾表示式

中綴轉字尾過程 1.對於數字 直接輸出 2.對於符號 2.1 左括號 進棧 2.2 運算符號 與棧頂符號進行優先順序比較,若棧頂符號優先順序低 此符號進棧 若棧頂符號優先順序不低 將棧頂符號彈出並輸出,之後進棧 若是乘除直接進棧 若是加減,與棧頂比較,若棧頂是乘除,直接輸出,否則進棧。2.3 右括號...

棧的應用 中綴表示式轉字尾表示式

如果是數字,則直接輸出 如果是左括號,直接入棧 如果是右括號,出棧,直到遇到第乙個左括號 如果是 或者 出棧,直到棧空或者左括號或者遇到 當前符號入棧 如果是 或者 出棧,直到棧空或者左括號,當前符號入棧 如果中綴表示式走完,將棧中的內容全部彈出 1.如果是數字,直接輸出 如下 if isdigit...