中缀表达式转后缀表达式

一.后缀表达式
中缀表达式就是我们平常所用的标准四则运算表达式
例如 " 9 +(3 - 1)× 3 + 10 ÷ 2 "
所有的符号都在运算数字的后面出现就叫做后缀表达式。例如 " 9 3 1 -3*+10 2 / + "
二.将中缀表达式转后缀表达式
1.规则:
从左到右依次遍历表达式的每个数字和符号
(1).若是数字就输出,即成为后缀表达式的一部分。
(2).若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。
三.代码实现

static void ClearStack(Stack *st)
{while(!Empty(st)){ElemType value;Top(st, &value);printf("%c ", value);Pop(st);}printf("\n");
}static void DealRightPare(Stack *st)
{int flag = 0;while(!Empty(st)){ElemType value;Top(st, &value);Pop(st);if(value == '(') {flag = 1;break;}printf("%c ", value);}if(!flag){printf("Pare is Error\n");}
}static void DealAddSub(Stack *st, char ch)
{while(!Empty(st)){ElemType value;Top(st, &value);if(value == '(') break;Pop(st);printf("%c ", value);}Push(st, ch);
}static void DealMultiDiv(Stack *st, char ch)
{while(!Empty(st)){ElemType value;Top(st, &value);if(value == '(' || value == '+' || value == '-')  break;Pop(st);printf("%c ", value);}Push(st, ch);
}void InfixToSuffix(char *infix_str)
{if(infix_str == NULL)  return;Stack st;InitStack(&st, 10);// 遍历infix_str字符串int  index = 0;while(infix_str[index] != '\0'){if(infix_str[index] == ' '){index++;continue;}if(isdigit(infix_str[index])) // 判断是数字的情况{printf("%c", infix_str[index]);if(!isdigit(infix_str[index+1])){printf(" ");}}else if(infix_str[index] == '(')  //  左括号的情况{Push(&st, infix_str[index]);}else if(infix_str[index] == ')')  //  右括号的情况{DealRightPare(&st);}else if(infix_str[index] == '+' || infix_str[index] == '-') // + - 符号的情况{DealAddSub(&st, infix_str[index]);}else if(infix_str[index] == '*' || infix_str[index] == '/') // * /符号的情况{DealMultiDiv(&st, infix_str[index]);}else{printf("Infix String is Error\n");return;}index++;}ClearStack(&st);DestroyStack(&st);
}

C语言实现 中缀转后缀相关推荐

  1. C语言实现中缀转后缀表达式,并求值

    C语言实现中缀转后缀表达式,并求值 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #inclu ...

  2. C语言实现中缀转后缀并计算表达式结果

    文章目录 一.问题描述 二.AC代码 三.注意点 四.实现思路/代码解析 一.问题描述 [问题描述] 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2   ...

  3. 【C语言】中缀转后缀(头歌数据结构)

    一.问题解析:过程分为两步: 第一步,是将输入的字符串处理,运算符和数字分类储存. 第二部,将中缀转后缀. 二.实现思路 首先来看第一步是如何实现的: 当传入一个字符串,我们需要对字符串的每一个字符根 ...

  4. pnd1 c语言,c语言实现中缀后缀前缀表达式相互转化并求值

    <c语言实现中缀后缀前缀表达式相互转化并求值>由会员分享,可在线阅读,更多相关<c语言实现中缀后缀前缀表达式相互转化并求值(21页珍藏版)>请在人人文库网上搜索. 1.1)表达 ...

  5. 【C语言中缀转后缀】

    中缀表达式 我们把平常所用的标准四则运算的表达式叫做中缀表达式,所有的运算符号都在俩数字中间 后缀表达式 后缀表达式是栈的运用,利用数组模拟栈的先进后出的特点,对后缀表达式进行计算 后缀表达式:后缀表 ...

  6. C语言(中缀转后缀)

    摘自<<数据结构与算法分析.第二版>>我目前看的就是这本书 a+b*c+(d*e+f)*g 转换成后缀表达式为:a b c * + d e * f + g * + 当读到一个操 ...

  7. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  8. 中缀表达式后缀表达式

    什么是中缀表达式 中缀表达式就是 a+b 这样的,运算符在两个数的中间 什么事后缀表达式 后缀表达式就是 a b + 这样的,运算符在两个数后面 再细分一下 中缀表达式 后缀表达式 a+b-c a b ...

  9. 顺序栈计算器 中缀转后缀表达式

    顺序栈计算器 中缀转后缀表达式 前言 一.后缀表达式简述 二.参考书目中的函数实现 1.输入一个后缀表达式并计算 2.将中缀转后缀表达式 三.在原方法基础上改写并结合两个方法 1.输入一个后缀表达式并 ...

最新文章

  1. python学习之第四课时--运算符
  2. Redis分布式锁实现
  3. 淘宝山寨IOS sdk
  4. leetcode —— 513. 找树左下角的值
  5. addressof表达式不能转换为long_2.3 C++赋值运算符与表达式 | 将有符号数据赋给无符号...
  6. Fuchsia编译及运行
  7. STL标准模版库--vector的操作集合
  8. 团队作业9——测试与发布(Beta版本)(含展示博客)
  9. 数学建模——线性规划篇
  10. xpraid安装_XP系统怎么安装raid驱动|XP系统安装raid驱动的方法
  11. visio中的公式在转换pdf后公式糊掉;word导出pdf时visio丢失模块字体
  12. 山东省计算机应用能力考核初级,山东省计算机应用能力考核.doc
  13. 解决百度地图(new BMap.Autocomplete)影响input赋值的问题
  14. poj3426(网络流)
  15. 华擎N3150J3160安装ESXi,然后组建家庭网络
  16. shiro使用md5salt哈希散列加密
  17. 病毒预报:Trojan_Generic.F
  18. 前端学习系列——(九)理解什么是ID选择器的“唯一性”
  19. armbian清理_小孩子才做选择,OMV、HomeAssistant我全都要,小白也能看懂的N1盒子纯净刷机指南...
  20. 进制转换 原码、反码、补码

热门文章

  1. 人生之路1.18.05优化
  2. redis关闭保护模式
  3. 2022巅峰极客WriteUp By EDISEC
  4. Pycharm+Selenium+Chrome配置,自动打开谷歌浏览器并访问百度页面
  5. 具备全局观念,系统解决问题
  6. 双层循环时,外循环越小,耗时越小
  7. java线程学习(二):线程池
  8. JAVA代码审计中危险函数
  9. 2023全新在线授权系统源码V3.7全开源无加密版,完美可用支持二次开发
  10. GitHub创建删除分支