棧的典型應用 中綴表示式求值

2021-08-25 22:27:05 字數 2080 閱讀 7795

#include

#define max 1010

using namespace std;

/* 表示式求值有兩步,一步是中綴表示式轉字尾表示式,一步是字尾表示式求值。

中綴轉字尾:

從左到右遍歷中綴表示式的每個數字和符號,

1)若是數字就輸出,即成為字尾表示式的一部分。

2)待入棧元素為')'時,彈棧至遇到'('

3)當棧空或當棧頂元素為'('或待入棧的元素為'('時壓棧,直接入棧

4)遇到四則運算符號時把若待入棧符號優先順序高於棧頂元素,直接入棧;否則,彈棧至待入棧符號優先順序高於棧頂元素

字尾求值:

把字尾序列依次入棧,遇到四則運算符號時,出棧最後壓進去的兩位數字,用後出棧的數字 運算 先出棧的數字,

然後把運算之後的數字壓入棧中。直至字尾序列為空。

*/template class stack

bool isfull()

bool isempty()

bool push(t item)

else

return

false;

}t pop() //彈棧

t popwithoutdelete() //檢視棧頂元素

~stack()

};char *infixtosuffix(char *strin)

//正號、負號的前乙個元素必定是'('或無前一元素,如(+15)、(-16)

if ((strin[i] == '-' || strin[i] == '+') && (i == 0 || strin[i - 1] == '('))

if (strin[i] == ')') //待入棧元素為')'時,彈棧至遇到'('

sta.pop();

continue;

}//當棧空或當棧頂元素為'('或待入棧的元素為'('時壓棧

if (sta.isempty() || sta.popwithoutdelete() == '(' || strin[i] == '(')

if (strin[i] == '-' || strin[i] == '+') //當遇到減法:'-' 、加法:'+'時

sta.push(strin[i]);

continue;

} if (strin[i] == '*' || strin[i] == '/') //當遇到'*' 、'/'時

sta.push(strin[i]);

continue;}}

while (!sta.isempty())

strout[++j] = '\0';

return strout;

}int suffixevaluation(char *out)

else

if(s.popwithoutdelete() >= '0' && s.popwithoutdelete() <= '9')

a += int(s.pop() - 48) * pow(10, e++);

} s.pop();

e = 0;

while(!s.isempty() && s.popwithoutdelete() != '(')

else

if(s.popwithoutdelete() >= '0' && s.popwithoutdelete() <= '9')

b += int(s.pop() - 48) * pow(10, e++);

} switch(operation)

result = temp;

if(temp < 0)

while(temp)

for(int k = cnt - 1; k >= 0; k--)

s.push(arr[k]);

}else

s.push(out[i]);

}return result;

}int main()

/* input:

-2+(-3)*(7-4)+(-84)/4

字尾:2(3(7(4(-(*(+(84(4(/(+(

result:

-32

*/

棧應用 中綴表示式轉字尾表示式求值

或中綴記法 是乙個通用的算術或邏輯公式表示方法,操作符是以中綴形式處於運算元的中間 例 3 4 中綴表示式是人們常用的算術表示方法。與字首表示式 例 3 4 或字尾表示式 例 3 4 相比,中綴表示式不容易被計算機解析,但仍被許多程式語言使用,因為它符合人們的普遍用法。確實,中綴表示式很符合人類的思...

中綴表示式求值的方法 棧

對於像是1 2的中綴表示式,我們可以輕鬆地運用 來算出結果。但是對於1 2 2 3 4這樣的表示式,事情就變得有些複雜了.對於上述的表示式,我們可以運用棧的相關知識來解決 建立兩個棧,棧1放數字,棧2放運算子 遇到數字時入棧1 遇到運算子時,若棧2為空,則pop出棧1中的兩個數運算,將運算完的結果壓...

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

棧的一些功能函式,這邊用到的是鏈式棧。typedef char elemtype 結點的資訊 struct node typedef struct node node 棧的資訊 struct stack typedef struct stack stack 初始化 int stackinit sta...