C语言实现 中缀转后缀
中缀表达式转后缀表达式
一.后缀表达式
中缀表达式就是我们平常所用的标准四则运算表达式
例如 " 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语言实现 中缀转后缀相关推荐
- C语言实现中缀转后缀表达式,并求值
C语言实现中缀转后缀表达式,并求值 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #inclu ...
- C语言实现中缀转后缀并计算表达式结果
文章目录 一.问题描述 二.AC代码 三.注意点 四.实现思路/代码解析 一.问题描述 [问题描述] 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2 ...
- 【C语言】中缀转后缀(头歌数据结构)
一.问题解析:过程分为两步: 第一步,是将输入的字符串处理,运算符和数字分类储存. 第二部,将中缀转后缀. 二.实现思路 首先来看第一步是如何实现的: 当传入一个字符串,我们需要对字符串的每一个字符根 ...
- pnd1 c语言,c语言实现中缀后缀前缀表达式相互转化并求值
<c语言实现中缀后缀前缀表达式相互转化并求值>由会员分享,可在线阅读,更多相关<c语言实现中缀后缀前缀表达式相互转化并求值(21页珍藏版)>请在人人文库网上搜索. 1.1)表达 ...
- 【C语言中缀转后缀】
中缀表达式 我们把平常所用的标准四则运算的表达式叫做中缀表达式,所有的运算符号都在俩数字中间 后缀表达式 后缀表达式是栈的运用,利用数组模拟栈的先进后出的特点,对后缀表达式进行计算 后缀表达式:后缀表 ...
- C语言(中缀转后缀)
摘自<<数据结构与算法分析.第二版>>我目前看的就是这本书 a+b*c+(d*e+f)*g 转换成后缀表达式为:a b c * + d e * f + g * + 当读到一个操 ...
- 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式
文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...
- 中缀表达式后缀表达式
什么是中缀表达式 中缀表达式就是 a+b 这样的,运算符在两个数的中间 什么事后缀表达式 后缀表达式就是 a b + 这样的,运算符在两个数后面 再细分一下 中缀表达式 后缀表达式 a+b-c a b ...
- 顺序栈计算器 中缀转后缀表达式
顺序栈计算器 中缀转后缀表达式 前言 一.后缀表达式简述 二.参考书目中的函数实现 1.输入一个后缀表达式并计算 2.将中缀转后缀表达式 三.在原方法基础上改写并结合两个方法 1.输入一个后缀表达式并 ...
最新文章
- python学习之第四课时--运算符
- Redis分布式锁实现
- 淘宝山寨IOS sdk
- leetcode —— 513. 找树左下角的值
- addressof表达式不能转换为long_2.3 C++赋值运算符与表达式 | 将有符号数据赋给无符号...
- Fuchsia编译及运行
- STL标准模版库--vector的操作集合
- 团队作业9——测试与发布(Beta版本)(含展示博客)
- 数学建模——线性规划篇
- xpraid安装_XP系统怎么安装raid驱动|XP系统安装raid驱动的方法
- visio中的公式在转换pdf后公式糊掉;word导出pdf时visio丢失模块字体
- 山东省计算机应用能力考核初级,山东省计算机应用能力考核.doc
- 解决百度地图(new BMap.Autocomplete)影响input赋值的问题
- poj3426(网络流)
- 华擎N3150J3160安装ESXi,然后组建家庭网络
- shiro使用md5salt哈希散列加密
- 病毒预报:Trojan_Generic.F
- 前端学习系列——(九)理解什么是ID选择器的“唯一性”
- armbian清理_小孩子才做选择,OMV、HomeAssistant我全都要,小白也能看懂的N1盒子纯净刷机指南...
- 进制转换 原码、反码、补码