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

2021-07-03 19:07:37 字數 1222 閱讀 6928

有關棧api詳情請參看我的另一篇博文:棧的鏈式儲存 - api實現

例項:5 + 4=> 5 4 +

1 + 2 * 3 => 1 2 3 * +

8 + ( 3 – 1 ) * 5 => 8 3 1 – 5 * + 

中綴表示式符合人類的閱讀和思維習慣

字尾表示式符合計算機的「運算習慣」

中綴轉字尾演算法:

遍歷中綴表示式中的數字和符號

對於數字:直接輸出

對於符號:

左括號:進棧

運算符號:與棧頂符號進行優先順序比較

若棧頂符號優先順序低:此符合進棧 (預設棧頂若是左括號,左括號優先順序最低)

若棧頂符號優先順序不低:將棧頂符號彈出並輸出,之後進棧

右括號:將棧頂符號彈出並輸出,直到匹配左括號

遍歷結束:將棧中的所有符號彈出並輸出

中綴轉字尾

主要**:

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "linkstack.h"

int isnumber(char c)

int isoperator(char c)

int isleft(char c)

int isright(char c)

int priority(char c)

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

return ret;

}void output(char c)

}//

void transform(const char* exp)

else if (isoperator(exp[i]))

linkstack_push(stack, (void*)(int)exp[i]);

} else if (isleft(exp[i]))

else if (isright(exp[i]))

linkstack_pop(stack);

} else

i++;

} while ((linkstack_size(stack) > 0) && (exp[i] == '\0'))

linkstack_destroy(stack);

}int main()

完整工程詳情:

github

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

中綴表示式 字尾表示式,都是用來呈現運算表示式的一種方式。標準表示式 4 5 6 7 中綴表示式,就是標準的表示式,即4 5 6 7 字尾表示式,符號在後的表示式,即4 5 6 7 中綴表示式轉字尾表示式的思想是 注意的是 只有 這5種符號才會入棧 1.讀到運算元時,立即輸出 2.讀到的是操作符,分...

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

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

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

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