《数据结构与算法分析——c语言描述》读后笔记 4
2015-08-16 15:17
447 查看
栈:
中缀到后缀的转换。我们只允许操作+,*,(,)。
中缀表达式:a+b*c+(d*e+f)*g,后缀表达式:abc*+de*f+g*+
程序如下,stack.h如上篇博文中所示:
![](http://s3.51cto.com/wyfs02/M00/71/71/wKiom1XQOPjyKlL_AAD0NhTKcTY823.jpg)
在上面的程序中的if(str[i]=='+')语句后面加上如下两个语句并修改相应的*对应的else if语句,就可以在表达式中使用+,-,*,、,(,)了。
![](http://s3.51cto.com/wyfs02/M01/71/72/wKiom1XQQBXBQPRwAADsBI3lPts135.jpg)
中缀到后缀的转换。我们只允许操作+,*,(,)。
中缀表达式:a+b*c+(d*e+f)*g,后缀表达式:abc*+de*f+g*+
程序如下,stack.h如上篇博文中所示:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include"stack.h" char* infix_to_postfix(char* str) { int i,j=0; int SIZE=strlen(str); if(str==NULL) { printf("empty string!!!\n"); return NULL; } Stack s=CreateStack(SIZE); char *tmpstr=malloc(sizeof(char)*(SIZE+1)); if(tmpstr==NULL) { printf("tmpstr is empty!\n"); return NULL; } for(i=0;i<SIZE;++i) { if(str[i]=='+') { while(!IsEmpty(s) && Top(s)!='(' ) { tmpstr[j++]=TopAndPop(s); } Push('+',s); } else if(str[i]=='*') { while(!IsEmpty(s) && Top(s)=='*') { tmpstr[j++]=TopAndPop(s); } Push('*',s); } else if(str[i]=='(') { Push(str[i],s); } else if(str[i]==')') { while(Top(s)!='(') { tmpstr[j++]=TopAndPop(s); } Pop(s); } else { tmpstr[j++]=str[i]; } } while(!IsEmpty(s)) { tmpstr[j++]=TopAndPop(s); } return tmpstr; } int main() { char ss[]="a+b*c+(d*e+f)*g"; char* goal=infix_to_postfix(ss); printf("the string is :%s\n",goal); return 0; }
![](http://s3.51cto.com/wyfs02/M00/71/71/wKiom1XQOPjyKlL_AAD0NhTKcTY823.jpg)
在上面的程序中的if(str[i]=='+')语句后面加上如下两个语句并修改相应的*对应的else if语句,就可以在表达式中使用+,-,*,、,(,)了。
else if(str[i]=='-') { while(!IsEmpty(s) && Top(s)!='(' ) { tmpstr[j++]=TopAndPop(s); } Push('-',s); }
else if(str[i]=='/') { while(!IsEmpty(s) && (Top(s)=='*' || Top(s)=='/') ) { tmpstr[j++]=TopAndPop(s); } Push('/',s);
else if(str[i]=='*') { while(!IsEmpty(s) && (Top(s)=='*' || Top(s)=='/') ) { tmpstr[j++]=TopAndPop(s); } Push('*',s); }
![](http://s3.51cto.com/wyfs02/M01/71/72/wKiom1XQQBXBQPRwAADsBI3lPts135.jpg)
相关文章推荐
- <八>java数据结构与算法 队列 与 循环队列
- <七>java数据结构与算法 栈 实现单词逆序
- <六>java数据结构与算法 栈
- <五>java数据结构与算法 对象排序
- 数据结构读书笔记1
- 数据结构读书笔记2
- <四>java数据结构与算法 插入排序
- <三>java数据结构与算法 选择排序
- <二>java数据结构与算法 冒泡排序
- [Data Structure] 数据结构中各种树
- <一>java数据结构与算法 数组
- RMQ区间求最值
- Java数据结构
- 《数据结构与算法分析——c语言描述》读后笔记 3
- PAT《数据结构学习与实验指导》实验项目集 3-05
- 数据结构——线索二叉树
- 数据结构学习笔记――线性表
- 数据结构 学习之图
- 数据结构学习笔记――概述
- PAT《数据结构学习与实验指导》实验项目集 3-04