用棧實現后綴表達式求解問題

一、問題概述:

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

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



二、解決思路

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

如下所示:



三、實現代碼


//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;
}


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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382791.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382791.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382791.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SetConsoleCursorPosition光標的位置控制

SetConsoleCursorPosition是一個計算機函數&#xff0c;如果用戶定義了 COORD pos&#xff0c;那么pos其實是一個結構體變量&#xff0c;其中X和Y是它的成員&#xff0c; 通過修改pos.X和pos.Y的值就可以實現光標的位置控制。 復制粘貼運行一下&#xff0c;你就明白代碼什么意…

用棧和遞歸求解迷宮問題

一、問題概述 小時候&#xff0c;我們都玩過走迷宮的游戲吧。看一下這個圖例&#xff1a; 遇到這種問題時&#xff0c;我們第一反應都會先找到迷宮的入口點&#xff0c;然后對上下左右四個方向進行尋跡&#xff0c; 檢測當前位置是否是通路&#xff0c;是否可以通過&#xff0…

exit(0) return區別

1. return是返回函數調用&#xff0c;如果返回的是main函數&#xff0c;則為退出程序。 exit是在調用處強行退出程序&#xff0c;運行一次程序就結束&#xff0c; 無論寫在那里&#xff0c;都是程序推出&#xff0c;括號里的數字0,1,-1會被寫入環境變量ERRORLEVEL&#xff0c…

electron 5.0.3版本 改動的地方

BrowserWindow.getFocusedWindow 1. BrowserWindow.getFocusedWindow getFocusedWindow 已經不是一個方法了&#xff0c; 這個簡單的問題解決了半天&#xff0c;因為我看文檔上 還是當一個方法來調用&#xff0c; 文檔沒有正確更新&#xff0c;實際上已經變成了一個屬性&#…

【c語言】棋盤游戲--三子棋

一、問題概述 大家都玩過棋盤游戲吧&#xff0c;像五子棋一樣&#xff0c;玩家或者是電腦一人下一次&#xff0c;當玩家或者是電腦的某一方先將各自的五個棋子下成一條線時&#xff0c;誰就贏&#xff0c;棋盤游戲就會結束。 當然&#xff0c;我今天要介紹的是三子棋&#xff…

【轉】淺析task_struct結構體

https://blog.csdn.net/peiyao456/article/details/54407343

electron 主進程與渲染進程 渲染進程與渲染進程 之間的通信

主進程與渲染進程之間的通信 這是渲染進程 // 渲染進程執行主進程里面的方法&#xff0c;主進程給渲染進程反饋處理結果 。 var sendreplayDomdocument.querySelector(#sendreplay); sendreplayDom.onclickfunction(){// alert(1213)//渲染進程給主進程廣播數據ipcRenderer.se…

centos升級之gcc 升級 gcc-7.3.0安裝

更新于&#xff1a;2018_7_28 安裝時間非常非常久&#xff0c;我最快一次40分鐘&#xff0c;最長一次兩個小時 cd / wget ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz tar -zxvf gcc-7.3.0.tar.gz cd gcc-7.3.0 ./contrib/download_prerequisites mkdir build cd …

[數據結構]用插入排序和選擇排序的思想實現優先級隊列

一、問題概述 優先級隊列的定義&#xff1a; 優先級隊列不同于普通的隊列&#xff0c;普通的隊列具有先進先出的原則&#xff0c;而優先級隊列是選擇優先級最高的先出隊。那么&#xff0c;如何模擬實現優先級隊列呢&#xff1f;在這里&#xff0c;我們將較大的值作為優先級較高…

node.js https 模塊設置請求頭等信息

// https://www.iqiyi.com/v_19rs789v28.html var fs require(fs); var https require(https); var option{rejectUnauthorized: false,hostname:www.iqiyi.com,path:/,headers:{Accept:*/*,Accept-Encoding:utf-8, //這里設置返回的編碼方式 設置其他的會是亂碼Accept-Lang…

centos升級之vim vim8.0安裝

YCM安裝攻略&#xff1a;https://blog.csdn.net/csdn_kou/article/details/81213935 卸載舊的vim yum remove vim* -y 一、源碼編譯安裝vim8.0 配置epel源 yum install epel-release 安裝python3,以及vim8.0編譯環境 yum install -y gcc python34 python34-devel ncurses…

[數據結構]求解迷宮最短路徑問題

一、問題概述 之前&#xff0c;我們了解了如何實現迷宮問題&#xff08;對于迷宮只有一個出口可以通的情況&#xff09;&#xff0c;事實上我們的迷宮有多個出口&#xff0c;對于每條路徑來說&#xff0c;有長有短&#xff0c;所以在這里&#xff0c;我們討論一下迷宮的最短路…

centos升級之內核kernel

yum update kernel yum update && yum upgrade # rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # yum –disablerepo”*” –enablerepo”elrepo-kernel” list ava…

[STL]List的實現

STL&#xff08;Standard template Library&#xff09;:c的標準模板庫 STL是算法和數據結構的軟件框架&#xff0c;它包含了六大組件&#xff1a;算法、迭代器、容器、仿函數、配接器、空間配置器。 迭代器&#xff1a;我們可以把迭代器相當于智能指針&#xff0c;&#xff0…

python 獲取windows上 網絡連接信息 ip dhcp dns gateway

import socket import os import re def get_host_ip():"""查詢本機ip地址:return:"""try:s socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.connect((8.8.8.8,80))# 能提取出本機ip 通過本機ip提取出其他設置ip s.getsockname()[0]# ip地…

vc++6.0的應用程序打不開腫么辦

今天早起&#xff0c;有同學問到我關于vc6.0的安裝過程中遇到的問題&#xff0c;我聽了之后想想還是寫篇博客給大家看一下吧。因為我之前也遇到過類似的問題。當時也是挺著急的。 大家遇到的問題估計就是這樣吧~~&#xff08;下載后打不開&#xff09; 請看-->解決步驟&…

【數據結構】廣義表

一、問題概述 廣義表是非線性的數據結構&#xff0c;是由若干個元素組合而成的&#xff0c;廣義表中可以有子表&#xff0c;類似這樣的&#xff1a; 我們以C(a,b,(c,d))為例&#xff0c;將它定義為這樣的數據結構&#xff1a; 我們會給定字符串的形式&#xff0c;如&#xff…

centos升級之共享文件夾

vmware-hgfsclient vmhgfs-fuse .host:/share /mnt/hgfs 如果不行的話 cd /mnt mkdir hgfs 把上面的在執行一次