(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 分別存放前序和中...