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

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++数据结构之中缀表达式转换为后缀表达式,删除堆栈元素

在这篇博客中&#xff0c;我们将深入分析一个使用C编写的栈和表达式计算程序。该程序不仅实现了基本的栈操作&#xff0c;还提供了中缀表达式转后缀表达式和删除堆栈中的元素等实用功能。通过逐一讲解每个函数的功能&#xff0c;我们将更全面地理解这个程序的实现。 资源获取&a…...

uni-app下,页面跳转后wacth持续监听的问题处理

uni-app下&#xff0c;页面跳转后wacth持续监听的问题处理 好久没写博客了&#xff0c;最近碰到了一个uni-app&#xff08;vue2&#xff09;开发小程序的问题&#xff0c;个人觉得很典型&#xff0c;所以拿出来给各位做个参考。 需求场景&#xff1a; 全局轮询用户权限。简单…...

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博客 占用的内存竟然这么小&#xff0c;才200M左右 随便选个节点进去&#xff0c;看能否连接上其他节点 redis-cli -h redis-cluster-v1-0.redis-cluster.project-gulimall.svc.cluster.local 再创建个…...

windows 11 本地运行ER-NeRF及pytorch3D安装

ER-NeRF本地运行只要梳理好依赖版本&#xff0c;运行起来就很顺畅 conda create -n ernerf python3.10 创建本项目虚拟环境conda install pytorch1.12.1 torchvision0.13.1 cudatoolkit11.3 -c pytorch 若windows有多个版本的cuda&#xff0c;需要在环境变量中切换至cuda 11.3&…...

mysql客户端navicat的一些错误合集

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

【力扣面试经典150题】(链表)K 个一组翻转链表

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

数据结构刷题

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

【Android】设置全局标题栏

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

R语言的入门学习

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

【开源】基于Vue和SpringBoot的民宿预定管理系统

项目编号&#xff1a; S 058 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S058&#xff0c;文末获取源码。} 项目编号&#xff1a;S058&#xff0c;文末获取源码。 目录 一、摘要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有些系统并不是默认就安装上该驱动的&#xff0c;如果没有安装该驱动&#xff0c;构造网络故障时会报错。 root:curtis# tc qdisc change dev enp4s0 root netem delay…...

从0开始学习JavaScript--JavaScript 数字与日期

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

从关键新闻和最新技术看AI行业发展(2023.11.6-11.19第十期) |【WeThinkIn老实人报】

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

计算机硬件的基本组成

一、冯诺依曼结构 存储程序&#xff1a; “存储程序”的概念是指将指令以二进制代码的形式事先输入计算机的主存储器&#xff0c;然后按其在存储器中的首地址执行程序的第一条指令&#xff0c;以后就按该程序的规定顺序执行其他指令&#xff0c;直至程序执行结束。 冯诺依曼计…...

【算法-哈希表3】四数相加2 和 赎金信

今天&#xff0c;带来哈希表相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 1. 四数相加2 分析题意 求符合条件的四元组的出现次数&#xff0c;条件&#xff1a; nums1nums2nums3nums4 从四个数组中的每一个数组取一个数 num1, num2, num3, num4&am…...

wpf devexpress自定义编辑器

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

文档向量化工具(一):Apache Tika介绍

Apache Tika是什么&#xff1f;能干什么&#xff1f; Apache Tika是一个内容分析工具包。 该工具包可以从一千多种不同的文件类型&#xff08;如PPT、XLS和PDF&#xff09;中检测并提取元数据和文本。 所有这些文件类型都可以通过同一个接口进行解析&#xff0c;这使得Tika在…...

信息系统项目管理师核心知识点精讲

一、项目整合管理(重点:项目章程与项目管理计划) 知识点详解: 项目整体管理是项目管理知识体系的核心,它确保项目各要素协调统一。在考试中,特别要掌握项目章程和项目管理计划的区别与联系。 项目章程是项目的“出生证明”,由项目发起人发布。它正式授权项目,赋予项…...

从分立逻辑到单片机:基于ATmega8的MIDI通道分析仪设计与实现

1. 项目概述&#xff1a;从分立逻辑到单片机的MIDI通道分析仪进化史二十年前&#xff0c;当我在《Elektor》杂志上发表第一版MIDI通道分析仪时&#xff0c;整个数字音乐世界还处于一个相当“硬核”的阶段。那个版本的设计&#xff0c;用今天的话来说&#xff0c;简直就是一场“…...

Vulnhub-DC-1

1.信息收集 使用工具nmap扫描主机端口 这是Drupal是使用PHP语言编写的开源内容管理框架&#xff08;CMF&#xff09;&#xff0c;它由内容管理系统&#xff08;CMS&#xff09;和PHP开发框架&#xff08;Framework&#xff09;共同构成 Web指纹扫描 发现是&#xff1a;drupal…...

为什么92%的DeepSeek二次开发团队在6个月内遭遇交付延迟?——基于17个真实项目的技术债务归因分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的DeepSeek二次开发团队在6个月内遭遇交付延迟&#xff1f;——基于17个真实项目的技术债务归因分析 在对17个采用DeepSeek-R1/VL模型开展定制化开发的工业级项目进行回溯审计后&#xff0c;我…...

写论文的神助攻!好用的AI写作辅助软件,逻辑清晰质量高

作为一名刚完成毕业论文的过来人&#xff0c;我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、逻辑不清、反复修改、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合&#xff0c;简直是论文写作的 "开挂神器"&#xff0c;效率直接拉满&#xff…...

PCB虚焊/走线断裂/焊盘脱落工程师易漏判

PCB 故障中&#xff0c;30% 并非元件损坏&#xff0c;而是 PCB 本身的隐性故障—— 虚焊、走线断裂、焊盘脱落、过孔开路。这类故障外观隐蔽、时好时坏、排查难度大&#xff0c;很多工程师反复更换元件仍无法解决&#xff0c;最终误判为 “板报废”。​一、PCB 隐性故障核心成因…...

MeloTTS实战:多语言语音合成的高效解决方案

MeloTTS实战&#xff1a;多语言语音合成的高效解决方案 【免费下载链接】MeloTTS High-quality multi-lingual text-to-speech library by MyShell.ai. Support English, Spanish, French, Chinese, Japanese and Korean. 项目地址: https://gitcode.com/GitHub_Trending/me/…...

DS4Windows终极指南:3步让PS手柄在PC上完美运行游戏

DS4Windows终极指南&#xff1a;3步让PS手柄在PC上完美运行游戏 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PS手柄连接Windows电脑后无法识别而烦恼吗&#xff1f;&#x1f3ae…...

CentOS 8/Stream 8系统DNF换源后,安装软件还是慢?试试这几个排查命令和优化技巧

CentOS 8/Stream 8系统DNF换源后安装缓慢的深度排查与优化指南当你已经按照教程将CentOS 8/Stream 8的DNF源切换为国内镜像&#xff0c;却发现软件安装速度依然不尽如人意时&#xff0c;这种体验确实令人沮丧。作为长期使用CentOS系统的技术专家&#xff0c;我完全理解这种&quo…...

UE5 Cesium项目里,如何把默认的飞行Pawn换成建筑漫游Pawn?保姆级迁移教程

UE5 Cesium项目建筑漫游Pawn迁移实战&#xff1a;从飞行模式到精细化浏览的完整指南当你在UE5中结合Cesium插件构建数字孪生场景时&#xff0c;DynamicPawn提供的全球飞行体验令人印象深刻。但当视角聚焦到单体建筑或室内空间时&#xff0c;那种仿佛操控无人机般的操作方式就显…...