7-5 表达式转换 (18 分)
**
7-5 表达式转换 (18 分)
**
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入格式:
输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。
输出格式:
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
输入样例:
2+3*(7-4)+8/4
//结尾无空行
输出样例:
2 3 7 4 - * + 8 4 / +
//结尾无空行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>typedef enum { push, pop, end } Operation;
typedef enum { false, true } bool;
typedef int ElementType;
typedef int QElemType;
typedef int Position;
typedef int Status;typedef struct Node{//栈ElementType *Data;Position Top;int MaxSize;
} SNode,*Stack;Stack CreateStack(int MaxSize){//创建栈Stack S = (Stack)malloc(sizeof(SNode));S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));S->Top = -1;S->MaxSize = MaxSize;return S;}void Push( Stack S, ElementType x){//入栈S->Top++;S->Data[S->Top]=x;}ElementType Pop(Stack S){//出栈int a;if(S->Top!=-1){a=S->Top;S->Top--;return S->Data[a];}elsereturn 0;}char GetTop(Stack S){//得倒栈顶的数据return S->Data[S->Top];}int yxj(char x){//得到优先级if(x=='#')return -1;else if(x=='('||x==')')return 0;else if(x=='+'||x=='-')return 1;else if(x=='*'||x=='/')return 2;elsereturn 0;}void zhuanta(Stack S,char a[]){int i;int flag=0;//判断第一个是否是负号(1为不是) 考虑表达式的第一个数是负数的情况int flag1=0;//判断下一个是否为数字(1为不是) 考虑表达式的数是非一位的情况int flag2=0;//判断是否是第一个(1为不是) 考虑在输出时空格的情况int flag3=0;//判断‘(’的下一个是不是正负号(1为是) 考虑表达式的数字是负数的情况char x;Push(S,'#');for(i = 0; i < strlen(a); i++){//循环x=a[i];if(isdigit(x)){//如果是数字或者有小数点if(flag1==1&&flag2==1)//不是第一个且下一个是符号就打一个空格printf(" ");printf("%c",x);flag=1;//第一个不是负号flag1=0;//归零flag2=1;//第一个不再可能是数字flag3=0;//归零}else{//不是数字flag1=1;//不是数字if(((x=='+'||x=='-')&&flag==0)||((x=='+'||x=='-')&&flag3==1)){//如果是负数或者是带正号的数(考虑正负号)if(x=='-')//如果是‘-’printf("%c",x);//输出‘-’flag3=0;//归零}else if(x=='+'||x=='-'||x=='*'||x=='/'){//如果是‘+’或‘-’或‘*’或‘/’while(yxj(GetTop(S))>=yxj(x)){//栈内优先级大printf(" %c", Pop(S));//输出}Push(S,x);//栈内优先级小就入栈}else if(x=='('){//如果是’(‘就入栈Push(S,x);flag3=1;//是左括号}else if(x==')'){//如果是’)‘while(GetTop(S)!='('){//在没遇到‘(’之前出栈输出printf(" %c",Pop(S));flag2=1;//第一个不是数字}Pop(S);//删除‘(’}else if(x=='.'){//小数点printf("%c",x);flag1=0;//带小数的数字}}}while(S->Top!=0){//循环输出栈内的符号printf(" %c", Pop(S));}}int main(){//存入数据char a[105];scanf("%s", a);//建立栈Stack S;S=CreateStack(22);zhuanta(S,a);return 0;}
7-5 表达式转换 (18 分)相关推荐
- 7-20 表达式转换 (25 分)
7-20 表达式转换 (25 分) 历时三个半小时终于完成. 这道题的难点主要是在处理数字前的正负号上,同时还应该注意数字有小数点并且不是一位数字. 因为在做题之前同学给我说过这道题,也知道几个坑,所 ...
- 7-20 表达式转换 (25 分)(代码详解+题目分析)
一:题目 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间.请设计程序将中缀表达式转换为后缀表达式. 输入格式: 输入在一行中 ...
- 习题3.11 表达式转换 (25分)
算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间.请设计程序将中缀表达式转换为后缀表达式. 输入格式: 输入在一行中给出不含空 ...
- Python 中缀表达式转换后缀表达式
实现一个可以处理加减乘数运算的中缀表达式转换后缀表达式的程序: 一个输入中缀表达式inOrder 一个输出池pool 一个缓存栈stack 从前至后逐字读取inOrder 首先看一下不包含括号的: ( ...
- c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)
逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Description 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. Input 输入一个算术表达式,以'#'字符作为结束标志. Output 输出该表达式转换所得到的后缀式. ...
- lamber表达式sql_lambda表达式转换sql
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Linq;usingSystem. ...
- 数据结构实验之栈二:一般算术表达式转换成后缀式
题目描述 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. 输入 输入一个算术表达式,以'#'字符作为结束标志. 输出 输出该表达式转换所得到的后缀式. 示例输入 a*b+(c-d/ ...
最新文章
- 十大机器智能新型芯片:华为抢占一席,Google占比最多
- koa --- 扩展hbs方法
- selenium java 参数化_Java+selenium 自动化测试【03】-- 数据驱动之参数化
- micrometer_具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
- 浅谈HotSpot逃逸分析
- Naughty Stone Piles(CF-226B)
- c语言输出数字菱形北京理工大学,C语言程序的设计—北京理工大学MOOC提交作业.docx...
- carsim中质心加速度_Carsim整车建模参数.doc
- 【转载】Java中String类的方法及说明
- [Linux]在本地修改Kali Linux系统的root密码
- 任务管理器被停用解决方法
- c语言中怎么表示26个字母,菜鸟求助,写一个随机输出26个英文字母的程序
- 从前台获取数据,并导出PDF文件
- matlab-colormap-contourf函数
- 工控机的日常维护方法及步骤
- 第九届泰迪杯A题(1)
- 免费python编程自学网站-可以免费自学编程的12个网站
- 股票数据-股票免费查询AP
- AJAX技术简介及入门实例[收藏]
- image-webpack-loader (in ./src/assets/404_images/404_cloud.png)
热门文章
- 购物车中 商品的选中状态之后的一些业务逻辑操作
- poj1958 Strange Towers of Hanoi 题解报告
- unknow ’query_cache_size’报错的解决方法吗
- CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法
- OpenCV windows 上安装
- MySQL中的翻页优化和延迟缓存
- [转]ubuntu server:开机自动登录
- Mr.J-- HTTP学习笔记(九)-- Web机器人
- Mr.J-- jQuery学习笔记(二)--核心函数jQuery对象
- 99乘法表(java版)