棧的應用 平衡符號 字尾表示式 中綴到字尾的轉換

2021-07-10 12:08:21 字數 1447 閱讀 7863

資料結構與演算法分析——c語言描述 第三章 平衡符號

平衡符號

#include"stack.h"

#includeint iscorrespond(char c1, char c2)

int main()

while ((c = getc(fin)) != eof)

} }}

字尾表示式 中綴到字尾的轉換,這兩節的應用我自己合起來寫了輸入乙個表示式計算。一開始先不管括號,很快寫完了。後來實現括號功能的就想到使用遞迴的。但我硬是要用迴圈來寫,結果寫了乙個晚上和乙個早上也沒有寫出來。最後還是使用了遞迴了。。。。對了用了c++來寫,c來寫的話很麻煩,自己實現的棧只能使用儲存一種型別,還是用c++寫了。

#include#include#include#include#includeusing namespace std;

#define maxn 100

char expression[maxn];//輸入的表示式

string postfix[maxn];//轉換成的逆序表示式

int i = 0, j = 0;//i是expression的游標,postfix是逆序表示式的游標

mapoperafunc;

int _add(int x, int y)

int _sub(int x, int y)

int _mul(int x, int y)

int _div(int x, int y)

int operatorcmp(char c1, char c2);//c1為將要插入棧的運算子,c2為棧頂運算子,1表示c1優先順序大於c2,0為相等,-1為小於

#define putnum() postfix[j++] = num,num.clear();//把數字輸出到逆序表示式

#define putoperator() oper= operator_stack.top(),operator_stack.pop(),postfix[j++] = oper;//把符號輸出到逆序表示式

void midtopostfix()

if (c == ')')

if (isdigit(c))

num += c;

else

else }}

} }if (!num.empty())

postfix[j++] = num;

while (!operator_stack.empty())

}int postfixtoint()

} return num_stack.top();

}int main()

printf("\n");

printf("%d", postfixtoint());

}int operatorcmp(char c1, char c2)

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

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

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

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

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

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