日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用栈实现后缀表达式求解问题

發布時間:2023/11/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用栈实现后缀表达式求解问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題概述:

人們經常書寫的數學表達式屬于中綴表達式,今天要解決的是,后綴表達式的求解問題。

如下圖分別為舉例的中綴表達式和后綴表達式:



二、解決思路

我們用棧存儲后綴表達式中的數據部分,當遇到操作符時就取出棧中的棧頂兩個元素,檢測操作符的類型,并進行相應的計算(這里要注意的是,對于除法運算,棧頂的兩個元素的位置得區分)。

如下所示:



三、實現代碼


//Expression.h

#pragma once #include<stack> #include<assert.h>enum Type {OP_SYMBOL,OP_NUM,ADD,SUB,MUL,DIV };struct Cell {Type _type;int _value; };void FunTest() {Cell RPN[] = {{OP_NUM,12},{OP_NUM,3},{OP_NUM,4},{OP_SYMBOL,ADD},{OP_SYMBOL,MUL},{OP_NUM,6},{OP_SYMBOL,SUB},{OP_NUM,8},{OP_NUM,2},{OP_SYMBOL,DIV},{OP_SYMBOL,ADD}};stack<int> s;for(size_t i = 0; i < sizeof(RPN)/sizeof(RPN[0]);++i){if(RPN[i]._type == OP_NUM){s.push(RPN[i]._value);}else if(RPN[i]._type == OP_SYMBOL){int second = s.top();s.pop();int first = s.top();s.pop();switch(RPN[i]._value){case ADD:s.push(first+second);break;case SUB:s.push(first-second);break;case MUL:s.push(first*second);break;case DIV:s.push(first/second);break;default:assert(false);}}else{assert(false);}}cout<<s.top()<<endl; }
//Expression.cpp

#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include"Expression.h"int main() {FunTest();return 0; }

后綴表達式就說到這里嘍,有需要改進得地方,歡迎提出寶貴意見哦。

總結

以上是生活随笔為你收集整理的用栈实现后缀表达式求解问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。