栈的应用--中序表达式转后序表达式


infix : a+b*c+(d*e+f)*g
postfix : abc*+de*f+g*+

有以下四种情况:

  1. 操作数->直接输出
  2. 操作符->将栈顶输出,直到栈顶优先级小于该操作符,最后把该操作符压入栈
  3. '(' ->入栈
  4. ')' ->将栈中在'('之后的操作符全部输出
#include <iostream>
#include <stack>
#include <map>
#include <string>using namespace std;int main() {stack<char> op;// 规定优先级map<char, int> mymap;mymap['+'] = 1;mymap['*'] = 2;string infix = "a+b*c+(d*e+f)*g";string postfix = "";for (int i = 0; i < infix.length(); i++) {// 操作数->直接输出if (infix[i] >= 'a' && infix[i] <= 'z') {postfix += infix[i];} else if (infix[i] == '(') {// '(' ->入栈op.push(infix[i]);} else if (infix[i] == ')') {// ')' ->将栈中在'('之后的操作符全部输出while (op.top() != '(') {postfix += op.top();op.pop();}// 将'('弹出op.pop();} else {// 操作符->将栈顶输出,直到栈顶优先级小于该操作符,最后把该操作符压入栈while (!op.empty() && mymap[op.top()] >= mymap[infix[i]]) {postfix += op.top();op.pop();}op.push(infix[i]);}}// 将栈中剩余的操作符输出while (!op.empty()) {postfix += op.top();op.pop();}cout << postfix << endl;return 0;
}

转载于:https://www.cnblogs.com/bgmind/p/3989808.html

栈的应用--中序表达式转后序表达式相关推荐

  1. “中序表达式”转换为“前序表达式”、“后序表达式”

    上周末参照书本写了个"计算器"的程序,其中最令我费解的就是"前序表达式"."后续表达式",好像记得老师在上课的时候讲过,估计当时也没听懂,看 ...

  2. Algs4-1.3.10中序表达式转为后序表达式(第二次实现)

    1.3.10编写一个过滤器InfixToPostfix,将算术表达式由中序表达式转为后序表达式.  答:本次做这个题时离上次做这个题有一个半月了,已经忘记了当时的算法.经过两个小时的研究(远低于第一次 ...

  3. 数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历

    数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历 目录 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式 在二叉树中找到一个节点的后继节点 1. 实现二叉树的先序,中序,后序遍历,包括递 ...

  4. 二叉树的创建、前序遍历、中序遍历、后序遍历

    二叉树的创建.前序遍历.中序遍历.后序遍历 // BTree.cpp : Defines the entry point for the console application. /*  作者:成晓旭 ...

  5. 二叉树的前序遍历,中序遍历,后序遍历

    这三也是经典的二叉树的三种方法 二叉树的前序遍历 递归实现 public class Main4 {static ArrayList<TreeNode> list = new ArrayL ...

  6. 前序遍历,中序遍历,后序遍历详解

    递归时,如果不先print,则是递归调用到最底层之后再print,所以这里我们看到的中序遍历以及后序遍历都是从最底部向上输出的. BST(Binary Search Tree)通常都是和inorder ...

  7. 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现

    二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现 提示:今天开始,系列二叉树的重磅基础知识和大厂高频面试题就要出炉了,咱们慢慢捋清楚! 文章目录 二叉树,二叉树的归先序遍历,中序遍历, ...

  8. 二叉树(Binary Tree):先序遍历、中序遍历、后序遍历和层次遍历

    二叉树(Binary Tree):先序遍历.中序遍历.后序遍历和层次遍历 树 Tree 二叉树 Binary Tree 先序遍历 Preorder Traversal 中序遍历 Inoreder Tr ...

  9. [算法] 二叉树的 先序遍历、中序遍历、后序遍历

    本文根据清华大学邓俊辉老师课程<数据结构>总结,课程地址 . 遍历介绍 按照事先约定的某种规则或次序,对节点各访问一次而且仅一次.与向量和列表等线性结构一样,二叉树的这类访问也统称为遍历( ...

最新文章

  1. PCL:最小特征值与特征向量为什么可以表示法向量??
  2. 教你3招,彻底搞定OCR数学公式识别难题!
  3. Docker的镜像导出与导入与拷贝
  4. C语言编程学生学籍登录窗口,C语言实现学生学籍管理系统
  5. python怎么调用局部变量_python基础:局部变量--全局变量的使用
  6. FM算法python实现
  7. 解决ubuntu下pdf中文不显示或乱码问题
  8. iOS/Android·全球
  9. 子组件触发父组件的方法
  10. Winform 五种常用对话框控件的简单使用
  11. 药品计算机数据备份管理制度,药品记录与数据管理规范(征求意见稿)
  12. 如何在linux下玩lol_英雄联盟新手教程 教你怎么玩lol
  13. css 背景颜色默认,css改变文字选择时的默认背景颜色
  14. 网站嵌入YouTube视频
  15. elastic search 如何将yellow 状态变为green健康状态
  16. 坐的越久,死的越快——说说工作环境
  17. 阿里云免费SSL证书申请详细流程
  18. 键盘Win和alt键互换了怎么改回来
  19. 用python画熊_Python数据可视化:Pandas库,只要一行代码就能实现
  20. ROS TF 常用接口函数

热门文章

  1. python后端和爬虫_10分钟教你Python爬虫(上)-- HTML和爬虫基础
  2. 手把手带你入门Python爬虫(五、CSDN论坛之模型设计)
  3. 基于asp.net的网上书店商城设计与实现
  4. Linux笔记-设置SSH公钥免密码登录
  5. Spring官方阅读笔记-@Controller官方解析与实例(5.0.12)
  6. 编码风格工作笔记-初步模仿大佬编码风格
  7. Qt文档阅读笔记-QVariant::value()与qvariant_cast解析及使用
  8. Qt工作笔记-对connect的第五个参数的研究
  9. Java工作笔记-Map的基本用法
  10. bcdedit添加linux引导,Linux_利用Bcdedit创建Linux系统引导,Bcdedit在Windows Vista中的一个命 - phpStudy...