栈_后缀表达式求解
對于數(shù)字:進棧
進棧對于符號:
從棧中彈出右操作數(shù)
從棧中彈出左操作數(shù)
根據(jù)符號進行運算
將運算結(jié)果壓入棧中
例子:831-5*+
以下代碼需要包含循環(huán)棧的類(我博客里有)
main.cpp
//判斷是否是數(shù)字 int IsNumber(char c) {return c >= '0'&&c <= '9'; }typedef struct MYNUM {LinkNode node;int val;}MyNun;//四則運算 int Caculate(int left, int right, char c) {int ret;switch (c){case '+':ret = left + right;break;case '-':ret = left - right;break;case '*':ret = left * right;break;case '/':ret = left / right;break;default:break;}return ret; }int main() {char *str = "831-5*+";linkstack* stack = new linkstack();char* p = str;while (*p != '\0'){//碰到數(shù)字直接壓棧if (IsNumber(*p)){MyNun* num = new MyNun;num->val = *p - '0';stack->push_back(stack->Stack, (LinkNode*)num);}else{//先從棧中彈出右操作符MyNun* right = (MyNun*)stack->Top_LinkStack(stack->Stack);int rightNum = right->val;stack->pop_back(stack->Stack);delete right;//取出左操作符MyNun* left = (MyNun*)stack->Top_LinkStack(stack->Stack);int leftNum = left->val;stack->pop_back(stack->Stack);delete left;//進行運算int ret = Caculate(leftNum, rightNum,*p);//結(jié)果入棧MyNun* num = new MyNun;num->val = ret;stack->push_back(stack->Stack,(LinkNode*)num);}p++;}if (stack->Size_LinkStack(stack->Stack) == 1){MyNun* num = (MyNun*)stack->Top_LinkStack(stack->Stack);cout << "運算結(jié)果:" << num->val << endl;stack->pop_back(stack->Stack);delete num;}return 0; }總結(jié)
- 上一篇: 栈的应用_中缀表达式转后缀表达式
- 下一篇: 递归算法分析