中缀表达式-后缀表达式M
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define Stack_Size 100 4 #define StackIncrement 10 5 #define Ok 1 6 #define Error 0 7 #define True 1 8 #define False 0 9 #define Overflow -2 10 typedef int status; 11 //字符栈的操作 12 typedef struct 13 { 14 char *base; 15 char *top; 16 int stacksize; 17 }SqStack; 18 status InitStack(SqStack &S) 19 { 20 S.base=(char *)malloc(Stack_Size*sizeof(char)); 21 if(!S.base) exit(Overflow); 22 S.top=S.base; 23 S.stacksize=Stack_Size; 24 return Ok; 25 } 26 status StackEmpty(SqStack &S) 27 { 28 if(S.top==S.base) 29 return True; 30 return False; 31 } 32 status GetTop(SqStack S,char &e) 33 { 34 if(S.top==S.base) return Error; 35 e=*(S.top-1); 36 return Ok; 37 } 38 status Push(SqStack &S,char e) 39 { 40 if((S.top-S.base)==S.stacksize) 41 { 42 S.base=(char *)realloc(S.base,(S.stacksize+StackIncrement)*sizeof(char)); 43 if(!S.base) exit(Overflow); 44 S.top=S.base+S.stacksize; 45 S.stacksize+=StackIncrement; 46 } 47 *S.top++=e; 48 return Ok; 49 } 50 status Pop(SqStack &S,char &e) 51 { 52 if(S.top==S.base) return Error; 53 e=*--S.top; 54 return Ok; 55 } 56 //转化的操作过程 57 static int i=0; 58 status Pass(char *s,char c) 59 { 60 s[i]=c; 61 i++; 62 return Ok; 63 } 64 status In(char c) 65 { 66 switch(c) 67 { 68 case '+': 69 case '-': 70 case '*': 71 case '/': 72 case '(': 73 case ')': 74 case '#':return True; 75 default :return False; 76 } 77 } 78 int Precede(char t1,char t2) 79 { 80 int f=0; 81 switch(t1) 82 { case '+': 83 case '-':if(!(t2=='('||t2=='*'||t2=='/')) 84 f=1; 85 break; 86 case '*': 87 case '/':if(t2!='(') 88 f=1; 89 break; 90 case '(':if(t2=='#') 91 {printf("缺乏左括号\n"); 92 exit(Overflow);} 93 break; 94 case ')':if(t2!='(') 95 f=1; 96 else 97 { 98 printf("括号不匹配\n"); 99 exit(Overflow); 100 } 101 } 102 return f; 103 } 104 status Converse(char *s) 105 { 106 SqStack OPTR; 107 char ch,x,c=getchar(); 108 InitStack(OPTR); Push(OPTR,'#'); 109 while(!StackEmpty(OPTR)) 110 { 111 if(!In(c)) 112 Pass(s,c); 113 else 114 switch(c) 115 { 116 case '(': Push(OPTR,c);break; 117 case ')': Pop(OPTR,ch);while(ch!='('){Pass(s,ch);Pop(OPTR,ch);}break; 118 default : 119 while(GetTop(OPTR,ch)&&Precede(ch,c)) 120 { 121 Pass(s,ch);Pop(OPTR,ch); 122 } 123 if(c!='#') 124 Push(OPTR,c); 125 } 126 if(c!='#') 127 c=getchar(); 128 else 129 { 130 Pop(OPTR,ch); 131 Pass(s,ch); 132 } 133 } 134 s[i]='\0'; 135 return Ok; 136 } 137 //主函数 138 status main() 139 { 140 char s[100]; 141 puts("请输入算术表达式:"); 142 Converse(s); 143 puts("转化后的后缀表达式为:"); 144 puts(s); 145 return Ok; 146 }
转载于:https://www.cnblogs.com/mycapple/archive/2012/08/03/2620928.html
中缀表达式-后缀表达式M相关推荐
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- 一行文章让你搞懂什么是前缀、中缀、后缀表达式以及它们之间的相互转换
一.什么前缀.中缀.后缀表达式(使用 8*(5+6)-1的例子) 1.中缀表达式:8*(5+6)-1:(也就是我们平常所见的运算式) 2.后缀表达式:8 5 6 + * 1 - :计算机是怎么运算的呢 ...
- 数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)
栈的三种表达式:前缀.中缀和后缀表达式,后缀也叫逆波兰表达式 前缀(波兰表达式) 中缀(对人来讲很好理解,对于计算机来讲就方便了,一般会把中缀表达式转换成后缀表达式) 后缀(逆波兰表达式) 计算过程 ...
- 前缀,中缀,后缀表达式
前缀表达式 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前. 例如: ( 3 + 4 ) × 5 − 6 (3+4)×5-6 (3+4)×5−6 对应的前缀表达式就是 - × + 3 4 5 ...
- 前缀表达式/中缀表达式/后缀表达式
前缀表达式/中缀表达式/后缀表达式 中缀表达式就是平常的表达式,如(3+4)*5-6=29 前缀表达式又称为波兰式,也就是运算符位于数字前面,如 -*+3456 后缀表达式又称为逆波兰式,也就是运算符 ...
- 中缀表达式 后缀表达式
一.什么是中缀表达式 & 后缀表达式? 中缀表达式: 我们生活中使用的算术表达式其实就是中缀表达式 举个例子:(1+6/3)*6 - 5 后缀表达式: 更有利于计算机进行计算的一种表达式,不再 ...
- C语言实现中缀转后缀表达式,并求值
C语言实现中缀转后缀表达式,并求值 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #inclu ...
- (笔记)前缀,中缀,后缀表达式
这一部分是王道书上没有的内容,根据视频内容整理 概念 Reverse Polish notation 逆波兰表达式(后缀表达式) Polish notation 波兰表达式(前缀表达式) 中缀表达式: ...
- 6 前缀、中缀、后缀表达式
文章目录 1 前缀表达式 1. 1 缀表达式的计算机求值 2 中缀表达式 3 后缀表达式 3. 1 后缀表达式的计算机求值 3. 2 中缀表达式转换为后缀表达式 1 前缀表达式 前缀表达式又称波兰式, ...
- 中缀表达式后缀表达式
什么是中缀表达式 中缀表达式就是 a+b 这样的,运算符在两个数的中间 什么事后缀表达式 后缀表达式就是 a b + 这样的,运算符在两个数后面 再细分一下 中缀表达式 后缀表达式 a+b-c a b ...
最新文章
- Android sqlite 数据库保存Date 类型
- 跟我学Kafka源码Producer分析
- Ubuntu 8.04 Linux系统下面编译更新内核版本
- centos7重装python_CentOS7重装yum和python
- Eclipse中安装TestNG插件
- c++ byte*长度_9.19秋冬原C日标95白鹅绒超保暖柔软大被子羽绒服 从头到脚的温暖...
- SXWIN7X64EN_20181104_NET_msu_LITE英文精简版
- 组态王bitset用法_组态王使用问题解答
- 峰度的意义_李德荃关于偏度与峰度的讲解
- 计算机网络工程专业大学排名,2020网络工程专业大学排名
- python银行账户资金交易管理_Python实现银行账户资金交易管理系统
- 太阳系各大行星运行轨迹
- WINDOWS 7 X86专业版SP1后续补丁包20150901(微软官方下载地址列表)
- Python SMTP 163邮箱发送邮件不成功
- c#运用——简体字转繁体字
- 谷歌R语言代码风格规定:
- NTP 服务的配置和使用
- Josh 的学习笔记之数字通信(Part 1——信号和频谱)
- java虚拟机堆空间
- android github轮播图,Android使用开源框架ANDROID-IMAGE-INDICATOR实现图片轮播部署
热门文章
- MyBatis快速将MySQL转换成Oracle语句
- Android开发笔记(一百四十四)高仿支付宝的头部伸缩动画
- DS博客作业03--栈和队列
- 你是“细”精你就赢了 游戏开发者怎样做好玩家细分
- Android Studio打开React Native创建的项目
- ASP.NET MVC 控制器激活(三)
- 浅谈百度云计算网络的构建之路
- 20世纪50年代开始,数字技术出现,数字计算机开始代替模拟计算机,我们从电气时代逐渐走到了信息时代,电脑重塑了社会的架构与价值。...
- [Head First设计模式]生活中学设计模式——组合模式
- 大规模C++软件开发 - notes