中序轉為前序與後序

2021-08-29 16:12:04 字數 1943 閱讀 6511

(1)從右到左讀進中序表示式的每個字元

(2)如果讀進的字元為運算元,則直接輸出到前序表示式中

(3)如果遇到「(」,則彈出堆疊內的運算子,直到彈出乙個「)」,兩者相互抵消

(4)「)」的優先順序在堆疊內比任何運算子都小,不過在堆疊外卻是優先順序最高者

(5)當運算子準備進入堆疊內時,必須和棧頂運算子比較,如果外面的運算子優先順序高於或等於棧頂運算子,則壓入棧中

如果優先順序低於棧頂運算子,就把棧頂運算子彈出,直到棧頂運算子優先順序低於外面運算子或堆疊為空,就再把外面這個運算子壓入棧中。

(6)中序表示式讀完後,如果運算子堆疊不為空,則將期內的運算子逐一彈出,輸出到前序表示式中即可。

例:(a+b)*d+e/(f+a*d)+c

用堆疊法轉換為前序表示式步驟

讀入字元

運算子堆疊中內容

輸出none

empty

none

cemptyc+

+c))+

cd)+dc

**)+dca

*)+adc

++)+

*adc

f+)+

f*adc(+

+f*adc//+

+f*adce/+

e+f*adc+++

/e+f*adcd++

d/e+f*adc

**++

d/e+f*adc

))*++

d/e+f*adc

b)*++

bd/e+f*adc

++)*++

bd/e+f*adc

a+)*++

abd/e+f*adc

(*++

+abd/e+f*adc

none

empty

++*+abd/e+f*adc

(1)從左到右讀入中序表示式每個字元

(2)如果讀進的字元為運算元,則直接輸出到後序表示式中

(3)如果遇到「)」,則彈出堆疊內的運算子,直到彈出到乙個「(」兩者互相抵消

(4)「(」的優先順序在堆疊內比任何運算子都小,在堆疊外卻是優先順序最高者。

(5)當運算子進棧時,如果外面的運算子高於棧頂運算子,則壓入棧中,

如果優先順序低於或等於棧頂運算子就把棧頂運算子彈出,直到棧頂運算子優先順序低於外面運算子或堆疊為空,就把外面運算子壓入棧中

(6)中序表示式讀完後,如果運算子堆疊不為空·,則將期內的運算子逐一彈出。

**展示(中序->後序):

#include #include #define max 50

char infix_q[max];

int compare(char stack_o, char infix_o);

void infix_to_postfix();

/*運算子優先權的比較,若輸入運算子小於堆疊中的運算子*/

/*,則返回值為1,否則為0 */

/*主函式宣告*/

int main ()

void infix_to_postfix()

infix_q[rear] = 'q';

printf("\t後序表示法 : ");

stack_t[top] = 'q';

for (flag = 0; flag <= rear; flag++)\

}}

前序中序後序

遍歷情況 前序 根結點 左子樹 右子樹 中序 左子樹 根結點 右子樹 後序 左子樹 右子樹 根結點 例題一 輸入描述 input description 輸入檔案共2行,第一行表示該樹的前序遍歷結果,第二行表示該樹的後序遍歷結果。輸入的字符集合為,長度不超過26。輸出描述 output descri...

前序中序求後序 後序中序求前序層次 模板

這是資料結構的知識。剛開始先拒絕用指標去寫。當我把這個想法和別人分享是,別人說不喜歡用指標的程式設計師不是乙個好的c c 程式設計師。所以,就有了這麼勵志的時刻,我參考大牛的 自己用指標寫了個遍,直接1a 不用指標總是出現各種想不到的錯誤。心累。orz.include include include...

前序中序求後序

test fdxeag xdefag 涉及到二叉樹的問題最好不用動態申請,對記憶體的管理很麻煩 採用預分配的靜態陣列 本題目由前序和中序得到後序,方法 先構造二叉樹,再進行 include includestruct nodetree 50 char str1 50 str2 50 分別存放前序和中...