#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...