【数据结构】13:表达式转换(中缀表达式转成后缀表达式)
思想:
从头到尾依次读取中缀表达式里的每个对象,对不同对象按照不同的情况处理。
- 如果遇到空格,跳过
- 如果遇到运算数字,直接输出
- 如果遇到左括号,压栈
- 如果遇到右括号,表示括号里的中缀表达式已经扫描完毕,将栈顶的运算符弹出并输出, 直至遇到左括号(左括号出栈但是不输出)
- 若遇到运算符,若当前运算符优先级高于栈顶运算符,将其压栈; 若小于等于栈顶元素的优先级,将栈顶运算符弹出并输出,再比较新的栈顶运算符,直到该运算符优先级高于栈顶运算符优先级为止,然后将其压栈。
- 若中缀表达式各个对象处理完毕,则把堆栈里的运算符一并输出。
示例

代码
int precedence(char op) {if (op == '+' || op == '-') return 1;else if (op == '*' || op == '/') return 2;else return 0; // 其他情况,比如括号等
}char* ExchangeToPost(char* Expr) {Stack S;S = CreateStack(100);int length = strlen(Expr);char* result = (char*)malloc(sizeof(char) * (length + 1));int i = 0;int j = 0;int k = 0;while (Expr[i] != '\0') {if (Expr[i] == ' ') {i++;}else if (isdigit(Expr[i])) {result[j] = Expr[i];//printf("case digital: result[%d]: %c\n", j, result[j]);j++;i++;}else if (Expr[i] == '(') {Push(S, Expr[i]);i++;}else if (Expr[i] == ')') {//print_s(S);char temp = Pop(S);while (temp != '(') {result[j] = temp;//printf("case ')': result[%d]: %c\n", j, result[j]);j++;temp = Pop(S);}i++;}else {if (IsEmpty(S)) {Push(S, Expr[i]);i++;continue;}char temp = Pop(S);if (temp == '(') {Push(S, temp);Push(S, Expr[i]);i++;continue;}if (precedence(Expr[i]) > precedence(temp)) {//printf("case opr: result[%d]: %c\n", j, result[j]);Push(S, temp);Push(S, Expr[i]);i++;}else {while (precedence(Expr[i]) <= precedence(temp)){result[j] = temp;//printf("case opr: result[%d]: %c\n", j, result[j]);j++;temp = Pop(S);}Push(S, temp);Push(S, Expr[i]);i++;}}//printf("i: %d, j: %d\n", i, j);//print_s(S);}while (!IsEmpty(S)) {result[j] = Pop(S);j++;}result[j] = '\0';return result;
}
相关文章:
【数据结构】13:表达式转换(中缀表达式转成后缀表达式)
思想: 从头到尾依次读取中缀表达式里的每个对象,对不同对象按照不同的情况处理。 如果遇到空格,跳过如果遇到运算数字,直接输出如果遇到左括号,压栈如果遇到右括号,表示括号里的中缀表达式已经扫描完毕&a…...
MySQL进阶查询篇(9)-视图的创建和应用
数据库视图是MySQL中一个非常重要的概念。它是一个虚拟表,由一个查询的结果集组成。数据库视图为用户提供了一种简化数据查询和操作的方式。本文将介绍MySQL数据库视图的创建和应用。 1. 创建数据库视图 要创建MySQL数据库视图,我们使用CREATE VIEW语句…...
Rhino.Inside带材质将Revit模型bake到Rhino
Hello大家好!我是九哥~ 今天来讲一个小技巧,就是我通常采用RIR将Revit的模型的Geometry Bake到Rhino,肯定是没有材质的,那么如果我们需要带材质那要怎么办呢? 对于会的人,其实挺简单的,只需要…...
随记-Java项目处理SQL注入问题
现象:http://10.xx.xx.xx:xx/services/xxService 存在SQL注入情况 加固意见: 需要对网站所有参数中提交的数据进行过滤,禁止输入“"、"xor"、"or"、”--“、”#“、”select“、”and“等特殊字符;所有…...
精读《js 模块化发展》
1 引言 如今,Javascript 模块化规范非常方便、自然,但这个新规范仅执行了 2 年,就在 4 年前,js 的模块化还停留在运行时支持,10 年前,通过后端模版定义、注释定义模块依赖。对经历过来的人来说,…...
Proteus -模拟串口被关闭后怎样打开
Proteus -模拟串口被关闭后怎样打开 点击恢复弹出窗口,即可重新打开...
【深度学习】pytorch 与 PyG 安装(pip安装)
【深度学习】pytorch 与 PyG 安装(pip安装) 一、PyTorch安装和配置(一)、安装 CUDA(二)、安装torch、torchvision、torchaudio三个组件(1)下载镜像文件(2)创建…...
Bert与ChatGPT
1. Bert模型 BERT(Bidirectional Encoder Representations from Transformers)是一种预训练语言表示的方法,由Google AI在2018年提出。它标志着自然语言处理(NLP)领域的一个重大进步,因为它能够理解单词在…...
微信自动预约小程序开发指南:从小白到专家
随着互联网的发展,小程序已经成为了一个备受欢迎的在线预约平台。本文将详细介绍如何使用第三方制作平台,如乔拓云网,来搭建一个从入门到精通的预约小程序。 首先,我们需要登录乔拓云网,并选择一个适合自己的小程序模板…...
巴尔加瓦算法图解【完结】:算法运用(下)
目录 布隆过滤器HyperLogLogSHA算法比较文件检查密码 Diffie-Hellman密钥交换线性规划结语(完结) 布隆过滤器 在元素很多的情况下,判断一个元素是否在集合中可以使用布隆过滤器。布隆过滤器(Bloom Filter)是 1970 年由…...
hexo部署到gitee(码云)
引言 Hexo 是一个基于Node.js的静态博客框架,而 Gitee(也被称为码云)是一个国内的代码托管平台,支持 Git 版本控制系统,与 GitHub 类似。将 Hexo 部署到 Gitee Pages 可以让你的博客受益于 Gitee 的国内服务器…...
linux系统非关系型数据库memcached
memcached 特点原理配置安装Memcached 特点 内置内存存储方式-----------为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失简单key/value存储---------------服务器不…...
前端vite+vue3——自动化配置路由布局
文章目录 ⭐前言💖vue3系列文章 ⭐ 自动化配置路由💖引入vite版本自定义目录映射💖自动化读取文件下的路由💖main入口加载路由💖入口app.vue配置💖layout基础布局配置💖效果 ⭐总结⭐结束 ⭐前言…...
速盾:怎么拿高防服务器做CDN
想要拿高防服务器做CDN,首先需要了解什么是CDN。CDN,即内容分发网络(Content Delivery Network),是一种通过互联网连接多个服务器,将静态和动态内容分发到最接近用户的服务器节点,从而提高用户访…...
SQLite database实现加密
注意:以下操作以VS2022为开发工具,以C#为开发语言。 数据加密原因 软件在使用的各个场景,很多都需要数据具有保密性,于是对于数据库就需要加密。特别是在某些特定领域或存储敏感数据尤其如此。 SQLite加密实现 SQLite加密有两种…...
Python requests模块 快速入门 这篇就够了
目录 一、Requests概述 二、安装Requests 三、Get请求 3.1 Get请求示例 3.2 Get请求爬取二进制数据 四、Post请求 4.1 Post请求示例 4.2 发送JSON数据 五、验证Cookies 六、会话请求 一、Requests概述 Requests是一个流行的Python第三方库,它专为HTTP通信…...
【VTKExamples::PolyData】第二十三期 InterpolateMeshOnGrid
很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例InterpolateMeshOnGrid,并解析接口vtkProbeFilter 、vtkWarpScalar & vtkDealuany2D等多个接口,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!…...
大数据术语系列(1)——COW和MOR,我如何使用chatgpt通俗易懂地理解了hudi这两种表类型
从传统数据库到大数据的转变,首当其冲的是各种术语的理解。 所以我与chatgpt发生了一系列对话,以便于我能快速理解这些术语。 我先把汇总的结果放在前边,后边会一步步地来说明我是如何获取这些信息的。前边我也发过一些关于chatgpt提示词相…...
蓝桥杯基础知识7 vector
蓝桥杯基础知识7 vector vector 的定义和特性:在C中,vector是一个动态数组容器,可以存储一系列相同类型的元素。 vector 是一个模板类,使用之前包含头文件<vector>,声明一个vector对象vec,T是存储在v…...
【Java万花筒】加速Java应用程序:探索性能优化的利器
Java性能优化:提升应用程序效率与可靠性的关键 前言 在当今软件开发领域中,性能是一个至关重要的方面。对于Java应用程序而言,优化其性能可以带来更高的效率和更好的用户体验。本文将介绍一些常用的Java性能优化库和工具,帮助开…...
【MYSQL】在Centos7和ubuntu22.04环境下安装
一.MYSQL在Centos7下的安装注意:安装与卸载中,⽤⼾全部切换成为root初期练习,mysql不进⾏⽤⼾管理,全部使⽤root进⾏1.卸载内置环境1-1卸载不要的环境[rootVM-0-3-centos ~]$ ps ajx |grep mariadb # 先检查是否有mariadb存在 131…...
终极指南:在Windows上使用APK Installer轻松安装Android应用
终极指南:在Windows上使用APK Installer轻松安装Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行Android应用吗&…...
KAN神经网络在GPT架构中的可解释性实验与实现
1. 项目概述:当KAN神经网络遇上GPT,一场关于可解释性的实验最近在开源社区里,一个名为“kan-gpt”的项目引起了我的注意。这个项目将两个看似不相关的领域——KAN(Kolmogorov–Arnold Networks)神经网络和GPTÿ…...
LabVIEW与单片机协同开发:构建可交互硬件原型的通信与事件驱动架构
1. 项目概述与核心思路上次我们聊了用LabVIEW制作一个“iPhone”的初步构想和界面设计,很多朋友反馈说对如何将虚拟界面与实际硬件联动起来特别感兴趣。这第二集,我们就来深入聊聊这块硬骨头——如何让LabVIEW这个强大的图形化编程工具,真正驱…...
为什么你的ElevenLabs广告完播率低于行业均值37%?——专业声学工程师用频谱图还原真相
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs广告配音的核心声学失效诊断 当ElevenLabs生成的广告语音出现“机械感过强”“情感断层”或“语调塌陷”等现象时,问题往往并非源于模型随机性,而是底层声学特征在合…...
CNN在卷什么:五大组件详解,一文讲透卷积神经网络,从LeNet到ResNet,为什么这5个组件是CNN的标配
CNN在卷什么:五大组件详解,一文讲透卷积神经网络 副标题: 从LeNet到ResNet,为什么这5个组件是CNN的标配 痛点:CNN的五大组件是什么? 学CNN的时候,你是不是分不清这些概念? 卷积层 vs 池化层:都是"滑动",有什么区别? BatchNorm 到底在做什么?为什么需要它…...
NCM解密终极指南:3步释放网易云音乐到任何播放器
NCM解密终极指南:3步释放网易云音乐到任何播放器 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经在网易云音乐下载了心爱的歌曲,却发现只能在特定应用中播放?当你想要将音乐迁移到其他设…...
如何用applera1n免费绕过iOS激活锁:完整指南与操作教程
如何用applera1n免费绕过iOS激活锁:完整指南与操作教程 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否购买了一部二手iPhone或iPad,却发现设备被原主人的Apple ID锁定&a…...
开源银行API模拟器Bankr Buddy:金融科技开发的本地化测试解决方案
1. 项目概述:一个为开发者准备的银行API模拟器如果你正在开发一个需要与银行账户数据打交道的应用,无论是个人财务管理工具、预算分析软件,还是企业级的财务聚合服务,你肯定遇到过同一个难题:如何在不触碰真实用户敏感…...
Obsidian智能模板终极指南:3步打造高效笔记自动化系统
Obsidian智能模板终极指南:3步打造高效笔记自动化系统 【免费下载链接】Templater A template plugin for obsidian 项目地址: https://gitcode.com/gh_mirrors/te/Templater Templater插件是Obsidian生态系统中功能最强大的智能模板解决方案,它能…...
