当前位置: 首页 > news >正文

王道考研数据机构:中缀表达式转为后缀表达式

实现方法: 

        初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:

  1. 遇到操作数。直接加入后缀表达式
  2. 遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意:“(”不加入后缀表达式。
  3. 遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若磁到“(”或栈空则停止。之后再把当前运算符入栈。

按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。

#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef struct Stack{char data[MaxSize];int top;
}Stack;
void initStack(Stack* &S){S = (Stack *)malloc(sizeof(Stack));S->top=-1;
}
bool push(Stack * &S, char e){if(S->top == MaxSize - 1)return false;S->data[++S->top] = e;printf("元素%c进栈\n",e);return true;
}
bool pop(Stack * &S,char &e){if(S->top==-1)return false;e = S->data[S->top--];printf("元素%c出栈\n",e);return true;
}
bool getTop(Stack * &S, char &e){if(S->top==-1)return false;e = S->data[S->top];return true;
}
bool emptyStack(Stack * &S){return S->top==-1;
}
int getSymbolPriority(char c){if(c=='+'||c=='-')return 1;elsereturn 2;
}
int main()
{Stack *s;char str[MaxSize];//中缀表达式 char houZhui[MaxSize];//后缀表达式 int index=0;scanf("%s",str);initStack(s);for(int i=0;str[i]!='\0';i++){printf("第%d次操作\n",i+1); if(str[i]=='+' || str[i]=='-' || str[i]=='*' || str[i]=='/'){int v1 = getSymbolPriority(str[i]);while(!emptyStack(s)){char e;getTop(s,e);if(e=='(')break;int v2 = getSymbolPriority(e);if(v2>=v1){pop(s,e);houZhui[index++]=e;}elsebreak;}push(s,str[i]);}else if(str[i]=='(' || str[i]==')'){if(str[i]=='(')push(s,str[i]);elsewhile(!emptyStack(s)){char e;getTop(s,e);if(e=='('){pop(s,e);break;c}else{pop(s,e);houZhui[index++]=e;}	}}else{houZhui[index++]=str[i];}printf("此时后缀表达式元素为:");for(int j=0;j<index;j++)printf("%c",houZhui[j]);printf("\n\n\n"); }printf("栈中剩余元素依次弹出:\n");while(!emptyStack(s)){char e;pop(s,e);houZhui[index++]=e;}printf("\n最终结果为:\n");for(int i=0;i<index;i++)printf("%c",houZhui[i]);return 0;
} 
//A+B-C*D/E+F
//A+B*(C-D)-E/F

运行结果:

 输入:

A+B-C*D/E+F

输出:
第1次操作
此时后缀表达式元素为:A

第2次操作
元素+进栈
此时后缀表达式元素为:A

第3次操作
此时后缀表达式元素为:AB

第4次操作
元素+出栈
元素-进栈
此时后缀表达式元素为:AB+

第5次操作
此时后缀表达式元素为:AB+C

第6次操作
元素*进栈
此时后缀表达式元素为:AB+C

第7次操作
此时后缀表达式元素为:AB+CD

第8次操作
元素*出栈
元素/进栈
此时后缀表达式元素为:AB+CD*

第9次操作
此时后缀表达式元素为:AB+CD*E

第10次操作
元素/出栈
元素-出栈
元素+进栈
此时后缀表达式元素为:AB+CD*E/-

第11次操作
此时后缀表达式元素为:AB+CD*E/-F

栈中剩余元素依次弹出:
元素+出栈

A+B-C*D/E+F
转为后缀表达式最终结果为:
AB+CD*E/-F+

 输入:

A+B*(C-D)-E/F

输出

第1次操作
此时后缀表达式元素为:A

第2次操作
元素+进栈
此时后缀表达式元素为:A

第3次操作
此时后缀表达式元素为:AB

第4次操作
元素*进栈
此时后缀表达式元素为:AB

第5次操作
元素(进栈
此时后缀表达式元素为:AB

第6次操作
此时后缀表达式元素为:ABC

第7次操作
元素-进栈
此时后缀表达式元素为:ABC

第8次操作
此时后缀表达式元素为:ABCD

第9次操作
元素-出栈
元素(出栈
此时后缀表达式元素为:ABCD-

第10次操作
元素*出栈
元素+出栈
元素-进栈
此时后缀表达式元素为:ABCD-*+

第11次操作
此时后缀表达式元素为:ABCD-*+E

第12次操作
元素/进栈
此时后缀表达式元素为:ABCD-*+E

第13次操作
此时后缀表达式元素为:ABCD-*+EF

栈中剩余元素依次弹出:
元素/出栈
元素-出栈

A+B*(C-D)-E/F
转为后缀表达式最终结果为:
ABCD-*+EF/-

相关文章:

王道考研数据机构:中缀表达式转为后缀表达式

实现方法&#xff1a; 初始化一个栈&#xff0c;用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素&#xff0c;直到末尾。可能遇到三种情况: 遇到操作数。直接加入后缀表达式遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式&…...

PL/SQL安装+汉化教程

PL/SQL安装教程 一、安装&#xff1a; 登陆官网&#xff1a;PL/SQL Developer - Allround Automations下载 下载PL/SQL稳定版本12.0.7 根据自己计算机版本安装相适配的版本。我这里安装X64-bit版本 进行安装&#xff1a; 根据情况去更改安装&#xff0c;我这里全部下一步…...

Qt | Qt 线程相关类概述和举例

Qt 是一个广泛用于跨平台应用开发的框架。在 Qt 中,多线程支持是其核心特性之一,它允许开发者在不同平台上创建并发应用。以下是 Qt 中与线程相关的类概述及其使用示例。 Qt 中的线程相关类 QThread QThread 是 Qt 中用于创建和管理线程的基类。通过派生并重写 run() 函数…...

Linux 复现Docker NAT网络

Linux 复现Docker NAT网络 docker 网络的构成分为宿主机docker0网桥和为容器创建的veth 对构成。这个默认网络命名空间就是我们登陆后日常使用的命名空间 使用ifconfig命令查看到的就是默认网络命名空间&#xff0c;docker0就是网桥&#xff0c;容器会把docker0当成路由&…...

HBuilder X 小白日记03-用css制作简单的交互动画

:hover选择器&#xff0c;用于选择鼠标指针浮动在上面的元素。 :hover选择器可用于所有元素&#xff0c;不只是链接 :link选择器 设置指向未被访问页面的链接的样式 :visited选择器 用于设置指向已被访问的页面的链接 :active选择器 用于活动链接...

【深度学习练习】心脏病预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是RNN RNN与传统神经网络最大的区别在于&#xff0c;每次都会将前一次的输出结果&#xff0c;带到下一隐藏层中一起训练。如下图所示&#xff1a; …...

创建react的脚手架

Create React App 中文文档 (bootcss.com) 网址&#xff1a;creat-react-app.bootcss.com 主流的脚手架&#xff1a;creat-react-app 创建脚手架的方法&#xff1a; 方法一&#xff08;JS默认&#xff09;&#xff1a; 1. npx create-react-app my-app 2. cd my-app 3. …...

用例导图CMind

突然有一些觉悟&#xff0c;程序猿不能只会吭哧吭哧的低头做事&#xff0c;应该学会怎么去展示自己&#xff0c;怎么去宣传自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;这两天一直在整理自己的作品&#xff0c;也为接下来的找工作多做点准备。接下来…...

C++ 仿函数

一、介绍 CSTL中的仿函数&#xff0c;又被称为函数对象&#xff0c;其实就是&#xff1a;重载了()运算符的类。 因为在使用重载的operator()时&#xff0c;类似于函数调用&#xff0c;因此被称为仿函数。 ※注意※&#xff1a;仿函数本质上是一个类&#xff0c;不是函数。 二…...

Redhat 安装 docker 网络连接超时问题

目录 添加阿里云的Docker CE仓库 更新YUM缓存 安装 Docker Engine 启动并设置Docker自启动 验证 Docker 安装 [userlocalhost ~]$ sudo yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo 正在更新 Subscription Management 软件仓库…...

Java面试题:undo log和redo log

undo log和redo log的区别 缓冲池(buffer pool): 主内存中的一个区域,可以缓存磁盘上经常被操作的数据,在执行crud时先操作缓冲池的数据以减少磁盘io 数据页(page): InnoDB存储引擎管理的最小单元,每页大小为16kb,页中存储的是行数据 redo log 重做日志,用来实现任务的持…...

【Scrapy】Scrapy 中间件等级设置规则

准我快乐地重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 再去做没流着情泪的伊人 假装再有从前演过的戏份 重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 你纵是未明白仍夜深一人 穿起你那无言毛衣当跟你接近 &#x1f3b5; 陈慧娴《傻女》 Scrapy 是…...

SDK环境的安装(测试使用)

1、安装 将文件解压至目录,我的目录为:D:\Program Files\Android 解压后如下: 下载链接如下: sdk下载 提取码见文章最后: 2、配置环境 1、在环境变量中,选择系统变量,点击新建。 变量名:ANDROID_HOME 变量值:“你自己的android-sdk安装路径” (例如我的:D:\Pro…...

【matlab】【python】爬虫实战

目录 引言 具体步骤 1.设置请求选项 2.发送请求并获取响应 3.设置正则表达式 4.执行正则表达式匹配 matlab完整代码 python代码示例 引言 在当今这个信息爆炸的时代&#xff0c;数据已成为推动社会进步和企业发展的核心动力之一。随着互联网的普及和技术的飞速发展&am…...

Android TV跨平台开发心得

这半年来陆陆续续做了一堆poc&#xff0c;刚开始是flutter&#xff0c;结果领导叫停了&#xff0c;说有其他部门做一样的事&#xff0c;真不巧&#xff1b;后来是react native&#xff0c;开发了个demo&#xff0c;上报上去了已经&#xff1b;现在又要做android nativewebview …...

View->裁剪框View的绘制,手势处理

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android…...

语言模型的进化:从NLP到LLM的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是一个充满挑战和机遇的领域。随着技术的发展&#xff0c;我们见证了从传统规则到统计机器学习&#xff0c;再到深度学习和预训练模型的演进。如今&#xff0c;我们站在了大型语言模型&#xff…...

应急响应--网站(web)入侵篡改指南

免责声明:本文... 目录 被入侵常见现象: 首要任务&#xff1a; 分析思路&#xff1a; 演示案例: IIS&.NET-注入-基于时间配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后门配合日志分析 (推荐) Webshell 查杀-常规后门&…...

vue3+vue-router+vite 实现动态路由

文章中出现的代码是演示版本&#xff0c;仅供参考&#xff0c;实际的业务需求会更加复杂 什么是动态路由 什么场景会用到动态路由 举一个最常见的例子&#xff0c;比如说我们要开发一个后台管理系统&#xff0c;一般来说后台管理系统都会分角色登录&#xff0c;这个时候也就涉…...

Okhttp hostnameVerifier详解

hostnameVerifier 方法简介核心原理参考资料 方法简介 本篇博文以Okhttp 4.6.0来解析hostnameVerfier的作用&#xff0c;顾名思义&#xff0c;该方法的主要作用就是鉴定hostnname的合法性。Okhttp在初始化的时候我们可以自己配置hostnameVerfier&#xff1a; new OkHttpClien…...

从零到一:NS2网络模拟器实战部署与场景构建指南

1. NS2网络模拟器入门指南 第一次接触NS2的朋友可能会被这个老牌网络模拟器的配置过程吓到。我刚开始用的时候&#xff0c;光是解决依赖问题就折腾了两天。不过别担心&#xff0c;跟着我的步骤走&#xff0c;你可以在半小时内完成基础环境搭建。 NS2本质上是一个离散事件网络模…...

Audio Pixel Studio人声分离应用:KTV原唱提取+伴奏复用创意玩法

Audio Pixel Studio人声分离应用&#xff1a;KTV原唱提取伴奏复用创意玩法 1. 音频处理新体验&#xff1a;从KTV到创意工作室 你是否遇到过这样的情况&#xff1a;在KTV听到一首喜欢的歌&#xff0c;想保存自己的演唱版本&#xff0c;却苦于无法消除原唱&#xff1f;或者想用…...

JVS-APS智能排产后如何配置移动端扫码报工

报工是在工厂中&#xff0c;确定人员/产线按照计划执行后&#xff0c;提交生产结果数据&#xff0c;那么在APS 完成计划排产后&#xff0c;如何能便捷的报工&#xff0c;下面我们有JVS快速开发平台做了一个报工的应用&#xff0c;实现 aps-mes 之间 任务下发与任务结果反馈的整…...

vue路由跳转打开新窗口并携带参数(vue2/vue3)

概要 在一些需求中经常遇到跳转页面&#xff0c;但是产品让跳转页面的同时打开一个新窗口方便用户进行对比数据&#xff0c;接下来就是跳转页面打开新窗口的方法 vue2的写法 const routeUrl this.$router.resolve({path: "/页面路由",query: { id: xx参数 },});wi…...

OpenHD图传实战:如何为你的树莓派3B天空端配置720P 60帧,实现低延迟流畅回传

OpenHD图传实战&#xff1a;树莓派3B天空端720P 60帧低延迟优化指南 当你已经完成OpenHD图传系统的基础搭建&#xff0c;却发现默认配置下的画面卡顿、延迟明显时&#xff0c;这篇文章将带你深入系统核心&#xff0c;通过精准调参实现从"勉强能用"到"专业级流畅…...

遥感小白别慌!ENVI 5.6 基础操作保姆级教程:从打开文件到剖面图显示,一篇搞定

遥感新手实战指南&#xff1a;ENVI 5.6 从零到剖面分析的完整工作流 第一次打开ENVI时&#xff0c;那个布满英文按钮的界面和密密麻麻的菜单栏&#xff0c;是不是让你瞬间想起了大学时被专业课支配的恐惧&#xff1f;别担心&#xff0c;三年前的我也是这样——面对一幅Landsat…...

千问3.5-9B视觉模型快速部署指南:单卡RTX 4090D实测可用

千问3.5-9B视觉模型快速部署指南&#xff1a;单卡RTX 4090D实测可用 1. 开篇&#xff1a;为什么选择千问3.5-9B视觉模型&#xff1f; 如果你正在寻找一个能够理解图片内容的中文多模态模型&#xff0c;千问3.5-9B视觉版&#xff08;Qwen3.5-9B-VL&#xff09;值得你关注。这个…...

猫抓插件深度解析:浏览器资源嗅探的终极实战指南

猫抓插件深度解析&#xff1a;浏览器资源嗅探的终极实战指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓插件是一款功能强大的开源浏览器扩…...

【力扣100题】09.反转链表

一、题目描述 给定单链表的头节点 head&#xff0c;反转链表并返回反转后的链表。 示例 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]输入&#xff1a;head [] 输出&#xff1a;[]二、核心思路 关键观察…...

TL494电源芯片避坑指南:常见设计误区与调试技巧

TL494电源芯片避坑指南&#xff1a;常见设计误区与调试技巧 在电源设计领域&#xff0c;TL494作为一款经典PWM控制芯片&#xff0c;凭借其稳定性和灵活性赢得了工程师的青睐。但就像任何工具一样&#xff0c;只有真正理解它的特性才能发挥最大价值。本文将带您深入TL494的设计细…...