栈实现前缀表达式的计算

news2024/11/15 17:03:03

前缀表达式计算

过程分析

  • 中缀表达式:(1 + 5)*3 => 前缀表达式:*+153 (可参考这篇文章:中缀转前缀)
    • 第一步:从右至左扫描前缀表达式(已存放在字符数组中),遇到第一个数字字符’3’,放入栈中
    • 第二步:接着扫描,遇到数字字符’5’,放入栈中
    • 第三步:接着扫描,遇到数字字符’1’,放入栈中
    • 第四步:接着扫描,遇到运算字符’+',连续两次出栈 a b ,计算 a 运算符 b,得到值,将值放入栈中(a:1,b:5)
    • 第五步:接着扫描,遇到运算字符’*',连续两次出栈 a b , 计算 a 运算符 b,得到值,将值放入栈中(a:6 ,b:3)
    • 第六步:扫描结束,返回栈顶元素

图解

代码分析

  • 思路:表达式存储在一个字符数组 exp[] 中,从右至左扫描,遇到数值的时候 入栈,遇到运算符的时候 出栈(连续两次)然后拿两个数值 a 和 b 以及运算符 op 进行计算,最后将计算结果再入栈,直到遍历完字符数组为止!

    // 运算函数,用来计算 a Op b
    int op(int a , int b , char Op){
        if(Op == '+')
            return a + b;
        if(Op == '-')
            return a - b;
        if(Op == '*')
            return a * b;
        if(Op == '/'){
            if(b == 0){
                cout<<"ERROR"<<endl;
            }else{
                return a/b;
            }
        }
    }
    
    // 计算前缀表达式
    int com(char exp[] , int n){				// n 字符数组长度
        int i , a , b , c;
        char Op;								// 接收运算字符
        // 创建顺序栈
        int stack[maxSize];						// maxSize 已定义最大空间
        int top = -1;
        
        
        for(i = n-1; i >= 0; --i){
            // 是数字,存入栈中
            if(exp[i] >= '0' && exp[i] <= '9'){
                stack[++top] = exp[i] - '0';
            }else{		
                // 不是数字,连续两次出栈
                Op = exp[i];
                
                a = stack[top--];
                b = stack[top--];
                
                c = op(a , b , Op);
                
                stack[++top] = c;
            }
        }
        return stack[top];
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1353565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

声明式的管理方法文件

1.声明式管理方法&#xff08;yaml&#xff09;文件 1.适合对资源的修改操作 2.声明式管理依赖于已有yaml文件&#xff0c;所有的内容都在yaml文件中声明 3.编辑好的yaml文件还是要依靠陈述式的命令发布到k8s集群当中 2.声明式的三种格式 1.deployment的yaml文件 demonset…

oracle-SCN系统改变号

SCN system change number 我们看到的SCN是一串数字&#xff0c;由时间经过函数算出的&#xff0c;其实就是时间。但时间的比较复杂&#xff0c;不如转换成数字比较。 给一个日志加scn号&#xff0c;其实就是给日志加上时间点。 2常见的SCN 对于scn的理解 控制文件中有两个sc…

【REST2SQL】02 GO连接Oracle数据库

Oracle数据库我用的最多&#xff0c;先研究Oracle,Go连接Oracle并实现REST和SQL服务。 1 Oracle数据库的安装 我这里安装使用的是Oracle 11g , 安装过程省略5217字。 2 安装Go-ora依赖 go get github.com/sijms/go-ora/v2 安装成功后在GOPATH目录可见&#xff1a; 3 创建一…

电脑提示找不到msvcp140.dll的修复方法,亲测有效的两种方法

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个组件&#xff0c;它包含了许多C运行时库文件。这些库文件为运行基于C编写的应用程序提供了必要的支持。当系统中缺少某个或某些库文件时&#xff0c;就可能出现msvcp140.dll丢失的错误。 一、以下是msvcp140.dll文…

DataLoader与Dataset

一、人民币二分类 二、DataLoader 与 Dataset DataLoader torch.utils.data.DataLoader 功能&#xff1a;构建可迭代的数据装载器 &#xff08;只标注了较为重要的&#xff09; • dataset: Dataset类&#xff0c;决定数据从哪读取及如何读取 • batchsize : 批大小 • num_…

12.Harbor构建私有镜像仓库

1、阿里云容器镜像服务-个人版 细心的同学可能已经发现,在前面的部署过程中,前面所有的部署步骤中需要的镜像都是从阿里云的镜像仓库中下载。 因为网络原因,有的镜像可能下载比较慢,有点可能下载不了,所以为了加速镜像下载,我都统一将镜像推送到阿里云的镜像仓库(个人…

【操作系统xv6】学习记录--实验1 Lab: Xv6 and Unix utilities--未完

ref:https://pdos.csail.mit.edu/6.828/2020/xv6.html 实验&#xff1a;Lab: Xv6 and Unix utilities 环境搭建 实验环境搭建&#xff1a;https://blog.csdn.net/qq_45512097/article/details/126741793 搭建了1天&#xff0c;大家自求多福吧&#xff0c;哎。~搞环境真是折磨…

Unity | 渡鸦避难所-5 | 角色和摄像机之间的遮挡物半透明

1 前言 角色在地图上移动到岩石后面时&#xff0c;完全被岩石遮挡&#xff0c;玩家只能看到岩石。这逻辑看起来没问题&#xff0c;但并不是玩家想要看到的画面&#xff0c;玩家更希望关注角色的状态 为了避免角色被遮挡&#xff0c;可以使用 Cinemachine Collider 功能&#x…

多模态——旷视大模型Vary更细粒度的视觉感知实现文档级OCR或图表理解

概述 现代大型视觉语言模型&#xff08;LVLMs&#xff09;&#xff0c;例如CLIP&#xff0c;使用一个共同的视觉词汇&#xff0c;以适应多样的视觉任务。然而&#xff0c;在处理一些需要更精细和密集视觉感知的特殊任务时&#xff0c;例如文档级OCR或图表理解&#xff0c;尤其…

Java多线程详解

进程 进程是程序的执行实例&#xff0c;而在进程的执行过程中&#xff0c;它需要操作和管理一系列的数据。这个数据集合通常包括程序的代码、程序计数器、寄存器、堆栈、数据段和其他与程序执行相关的信息。这些数据共同构成了一个进程的上下文&#xff08;context&#xff09…

案例088:基于微信小程序的校车购票平台设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Docker-compose使用全解 一)

Docker-compose使用全解 Compose介绍Compose的作用和职能 Compose和Docker兼容性安装docker-compose添加可执行权限 Docker Compose常用配置imagebuildcontext上下文指定镜像名args构建环境变量 commanddepends_onports特殊映射关系 volumesenvironment Docker Compose命令详解…

适合 C++ 新手学习的开源项目——在 GitHub 学编程

作者&#xff1a;HelloGitHub-小鱼干 俗话说&#xff1a;万事开头难&#xff0c;学习编程也是一样。在 HelloGitHub 的群里&#xff0c;经常遇到有小伙伴询问编程语言如何入门方面的问题&#xff0c;如&#xff1a; 我要学习某一门编程语言&#xff0c;有什么开源项目可以推荐…

juniper EX系列交换机 包过滤(Packet Filtering)配置

Juniper EX交换机支持基于物理端口、VLAN和三层VLAN接口的包过滤技术&#xff1a; 在二层过滤下支持&#xff1a; ■ Ingress port firewall filter ■ Ingress VLAN firewall filter ■ Egress VLAN firewall filter 在三层过滤下支持&#xff1a; ■ Ingress port firew…

项目经理面试10问

今天我们来说说项目经理专业面试的十条经验总结。如果你认真阅读并思考&#xff0c;相信对在屏幕前的你会有所帮助和启发。 1、请做一下自我介绍 自我介绍很重要。无论面试什么岗位&#xff0c;面试官通常都会问你一个最常见的问题&#xff1a;“请做一下自我介绍。” 在准备…

搜维尔科技:【简报】第九届元宇宙数字人设计大赛,报名已经进入白热化阶段!

随着元宇宙时代的来临&#xff0c;数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划与美术设计的专业核心能力&#xff0c;我们特别举办了这场元宇宙数字人设计赛道&#xff0c;赛道主题为「AI人工智能科技」 &#xff0c;只要与「AI人工智能科技」相关的…

三菱plc的点动控制循环(小灯闪烁,单控气缸循环)

以为前一段时间小编做了一个气缸定时循环的程序&#xff0c;根据程序有不足之处&#xff0c;所以小编写下这篇文章&#xff0c;将网络上的plc小灯控制进行总结&#xff01;如果对你有帮助&#xff0c;不要忘了点赞收藏&#xff01;如果有更加好的梯形图&#xff0c;欢迎评论&am…

搭建FTP服务器

目录 一、FTP 1.1 FTP简介 1.2 FTP服务器搭建 1.2.1 前提 1.2.2 创建组 1.2.3 创建用户 1.2.4 安装FTP服务器 1.2.5 配置FTP服务器 1.2.6 配置FTP的文件夹权限 1.2.7 连接测试 1.2.8 允许外部访问 二、计算机端口介绍 2.1 端口简介 2.2 开启端口 2.3 端口相关 2…

第一至四批专精特新“小巨人”企业信息库

第一至四批专精特新“小巨人”企业信息库 1、指标&#xff1a;专精特新公示批次、企业名称、登记状态、法定代表人、注册资本、实缴资本、成立日期、核准日期、营业期限、所属省份、所属城市、所属区县、电话、更多电话、邮箱、更多邮箱、统一社会信用代码、纳税人识别号 注册…

Java后端开发——Spring实验

文章目录 Java后端开发——Spring实验一、Spring入门1.创建项目&#xff0c;Spring依赖包。2.创建JavaBean&#xff1a;HelloSpring3.编写applicationContext.xml配置文件4.测试&#xff1a;启动Spring&#xff0c;获取Hello示例。 二、Spring基于XML装配实验1.创建JavaBean类&…