C/C++数据结构之中缀表达式转换为后缀表达式,删除堆栈元素
在这篇博客中,我们将深入分析一个使用C++编写的栈和表达式计算程序。该程序不仅实现了基本的栈操作,还提供了中缀表达式转后缀表达式和删除堆栈中的元素等实用功能。通过逐一讲解每个函数的功能,我们将更全面地理解这个程序的实现。
资源获取:
-
官方途径:点击博主头像,主页下载资源,需花费积分!
-
个人途径:公众号:每日推荐系列,回复【表达式转换】免费获取!
核心数据结构
1. 栈的实现
struct Node { ... };
struct Stack { ... };
-
Node结构:表示栈的元素,包含一个整数类型的数据和指向下一个结点的指针。
-
Stack结构:自定义栈,包含栈顶指针和栈的大小。提供了基本的入栈、出栈、获取栈顶元素、判断栈是否为空等操作。
详细功能解析
1. 中缀表达式转后缀表达式(主要功能函数 ①)
string zhuanhuan(const string& infix) { //方法都大差不差string postfix;Stack operatorStack;for (char ch : infix) {if (isdigit(ch)) {postfix += ch;}else if (ch == '(') {operatorStack.Push(ch);}else if (ch == ')') {while (......略......) {......略......}if (......略......) {......略......}}else {while (!operatorStack.IsEmpty() && operatorStack.Top() != '(' &&......略......}operatorStack.Push(ch);}}while (!operatorStack.IsEmpty()) {......略......}return postfix;
}
主要函数过程是遍历中缀表达式,使用栈辅助转换。数字直接输出,左括号入栈,右括号弹出栈元素直到遇到左括号,运算符按照优先级处理。
效果图如下:
2. 删除堆栈中的元素(主要功能函数 ②)
void Delete(int value) { //删除指定元素......略......while (!IsEmpty()) {int topValue = Top();Pop();if (topValue == value) {......略......}else {......略......}}if (!found) {cerr << "未找到要删除的元素" << endl;}else {......略......}while (!reversedValues.empty()) {......略......cout << endl;}}};
删除堆栈中的元素,使用临时栈将不需要删除的元素暂存,输出删除的元素,最终恢复原始栈的值。
效果图如下:
3. 表达式计算(非主要功能)
double EvaluatePostfix(const std::string& postfix) { std::stack<double> operandStack;for (char ch : postfix) { if (std::isdigit(ch) || (ch == '.')) {......略......}else if (ch == ' ') {#####略######}else { //俩俩的算,运算之后再次push进去######略#######switch (ch) {case '+':operandStack.push(a + b);break;case '-':operandStack.push(a - b);break;case '*':operandStack.push(a * b);break;case '/':operandStack.push(a / b);break;}}}return operandStack.top();
}
遍历后缀表达式,使用栈存储操作数,遇到运算符则弹出栈顶两个元素进行计算,将结果压入栈中。
4.其他函数:
4.1. Stack Pushand()
Stack Pushand() {Stack stack;// ... 省略部分代码 ...return stack;
}
- 用户输入堆栈数据个数,并逐个输入数字,构建堆栈。
- 输出堆栈中的值,并返回构建好的堆栈。
4.2. void Printf()
和 void Printf_2()
void Printf() {// ... 省略部分代码 ...
}void Printf_2() {// ... 省略部分代码 ...
}
Printf
:打印主菜单,显示功能选项。Printf_2
:打印功能结束提示。
4.3. void choice_1()
和 void choice_2()
void choice_1() {// ... 省略部分代码 ...
}void choice_2() {// ... 省略部分代码 ...
}
choice_1
:执行中缀表达式转后缀表达式的操作,输出后缀表达式和计算结果。choice_2
:执行删除堆栈中元素的操作,输出删除后的堆栈。
主函数如下:
int main() {int choice;do {Printf();cout << "请输入选择:";cin >> choice;switch (choice) {case 1:choice_1();break;case 2:choice_2();break;case 0:break;default:cout << "无效的选择,请重新输入" << endl;Printf_2();}} while (choice != 0);return 1111111111111111111;
}
感谢分享这篇有关C/C++数据结构的文章,涵盖了栈的基本操作、中缀表达式转后缀表达式、删除堆栈中的元素以及表达式的计算等方面的内容。如果读者想深入学习相关主题,以下是一些额外的资源和知识点,以及网址链接:
1. 堆栈相关资源:
- C++ 标准模板库 (STL) - stack:C++中标准库提供的堆栈容器的文档。
- C++ 标准模板库 (STL) - vector:与堆栈有关的底层数据结构之一。
- GeeksforGeeks - Stack Data Structure:GeeksforGeeks 上关于堆栈数据结构的详细教程和实现。
2. 中缀表达式转后缀表达式:
- Shunting Yard Algorithm:维基百科上关于Shunting Yard算法的介绍。
- 中缀表达式转后缀表达式算法:GeeksforGeeks 上的中缀到后缀的算法和实现。
3. C++ 表达式计算:
- C++ 中的字符串流 (Stringstream):用于将字符串转换为其他数据类型,对表达式计算很有用。
- C++ 中的 switch 语句:用于处理不同运算符的计算。
4. 其他相关资源:
- C++ Primer (书籍):Stanley B. Lippman等人编写的 C++ 入门经典。
- LeetCode:在线刷题平台,提供丰富的数据结构和算法问题,适合提高编程能力。
5. 相关知识点的网址链接:
- C++ 中文网:提供了丰富的C++学习资源和实例。
- Stack Overflow:程序员问答社区,可以在这里提问和查找与编程相关的问题。
希望这些资源能够帮助读者更深入地学习和理解C/C++数据结构及相关算法。
相关文章:

C/C++数据结构之中缀表达式转换为后缀表达式,删除堆栈元素
在这篇博客中,我们将深入分析一个使用C编写的栈和表达式计算程序。该程序不仅实现了基本的栈操作,还提供了中缀表达式转后缀表达式和删除堆栈中的元素等实用功能。通过逐一讲解每个函数的功能,我们将更全面地理解这个程序的实现。 资源获取&a…...
uni-app下,页面跳转后wacth持续监听的问题处理
uni-app下,页面跳转后wacth持续监听的问题处理 好久没写博客了,最近碰到了一个uni-app(vue2)开发小程序的问题,个人觉得很典型,所以拿出来给各位做个参考。 需求场景: 全局轮询用户权限。简单…...
Python技术栈 —— 语言基础
Python基础 语法拾遗List与Tuple的区别yield关键字for in enumeratefor in zip 精彩片段测量程序用时 语法拾遗 List与Tuple的区别 ListTuple建立后是否可变可变不可变建立后是否可添加元素可添加不可添加 # list and tuple List [1, 2, 3, 4, 5] Tuple (1, 2, 3, 4, 5) p…...

redis cluster搭建
k8s部署 Redis Insight k8s部署redis集群_mob6454cc6c6291的技术博客_51CTO博客 占用的内存竟然这么小,才200M左右 随便选个节点进去,看能否连接上其他节点 redis-cli -h redis-cluster-v1-0.redis-cluster.project-gulimall.svc.cluster.local 再创建个…...
windows 11 本地运行ER-NeRF及pytorch3D安装
ER-NeRF本地运行只要梳理好依赖版本,运行起来就很顺畅 conda create -n ernerf python3.10 创建本项目虚拟环境conda install pytorch1.12.1 torchvision0.13.1 cudatoolkit11.3 -c pytorch 若windows有多个版本的cuda,需要在环境变量中切换至cuda 11.3&…...

mysql客户端navicat的一些错误合集
关于mysql的客户端的使用的一些问题 问题描述: 在使用navicat prenium客户端的时候,连接数据库出现 Table ‘performance_schema.session_variables’ doesn’t exist 错误 解决方案: 首先找到mysql的bin目录 然后winR 进入到cmd界面 输入…...

【力扣面试经典150题】(链表)K 个一组翻转链表
题目描述 力扣原文链接 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只…...

数据结构刷题
空间复杂度:临时开辟的空间、空间是可以重复利用的 递归为O(n) 时间复杂度:程序执行次数 消失的数字 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路1:利用连续的特点求等差和然后减去所有元素得到的就是消…...

【Android】设置全局标题栏
序言 在做项目的时候,有时候需要一个全局统一的标题栏,保证项目风格的统一,但是如果在每个activity上面都写一遍这个标题栏就很麻烦了,我们经常用的方法就是写个基类Activity,然后当某个Activity需要这个统一的标题栏…...

R语言的入门学习
目录 准备工作导入csv数据集选择前200行作为数据集展示数据集的前/后几N行宏观分析删除缺失值构建直方图导出为图片 R语言常见图像类型例1:散点图例2:散点矩阵图 准备工作 安装教程: R语言和RStudio的下载安装(非常简便舒适&…...

【开源】基于Vue和SpringBoot的民宿预定管理系统
项目编号: S 058 ,文末获取源码。 \color{red}{项目编号:S058,文末获取源码。} 项目编号:S058,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色…...
nacos集群部署
GitHub - nacos-group/nacos-k8s: This project contains a Nacos Docker image meant to facilitate the deployment of Nacos on Kubernetes using StatefulSets. 需要修改两个文件 --- apiVersion: v1 kind: Service metadata:name: nacos-headlessnamespace: project-guli…...

9、传统计算机视觉 —— 边缘检测
本节介绍一种利用传统计算机视觉方法来实现图片边缘检测的方法。 什么是边缘检测? 边缘检测是通过一些算法来识别图像中物体之间,或者物体与背景之间的边界,也就是边缘。 边缘通常是图像中灰度变化显著的地方,标志着不同区域的分界线。 在一张图像中,边缘可以是物体的…...

Linux tc 使用
tc模拟延时丢包等网络故障依赖的内核驱动 /lib/modules/5.15.0-52-generic/kernel/net/sched/sch_netem.ko有些系统并不是默认就安装上该驱动的,如果没有安装该驱动,构造网络故障时会报错。 root:curtis# tc qdisc change dev enp4s0 root netem delay…...

从0开始学习JavaScript--JavaScript 数字与日期
JavaScript中的数字和日期是处理数值计算和时间相关任务的核心。本文将深入研究JavaScript中数字的表示、常见运算,以及日期对象的创建、格式化等操作,并通过丰富的示例代码,可以更全面地了解和应用这些概念。 JavaScript数字基础 JavaScri…...

从关键新闻和最新技术看AI行业发展(2023.11.6-11.19第十期) |【WeThinkIn老实人报】
Rocky Ding 公众号:WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习&…...

计算机硬件的基本组成
一、冯诺依曼结构 存储程序: “存储程序”的概念是指将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。 冯诺依曼计…...
【算法-哈希表3】四数相加2 和 赎金信
今天,带来哈希表相关算法的讲解。文中不足错漏之处望请斧正! 理论基础点这里 1. 四数相加2 分析题意 求符合条件的四元组的出现次数,条件: nums1nums2nums3nums4 从四个数组中的每一个数组取一个数 num1, num2, num3, num4&am…...

wpf devexpress自定义编辑器
打开前一个例子 步骤1-自定义FirstName和LastName编辑器字段 如果运行程序,会通知编辑器是空。对于例子,这两个未命名编辑器在第一个LayoutItem(Name)。和最终用户有一个访客左右编辑器查阅到First Name和Last Name字段,分别。如果你看到Go…...

文档向量化工具(一):Apache Tika介绍
Apache Tika是什么?能干什么? Apache Tika是一个内容分析工具包。 该工具包可以从一千多种不同的文件类型(如PPT、XLS和PDF)中检测并提取元数据和文本。 所有这些文件类型都可以通过同一个接口进行解析,这使得Tika在…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...