普通人在书写计算式时会选择中缀表达式,这样符合人脑的认知习惯。可计算机处理时后缀表达式才能使处理速度更快,其缘由是利用堆栈结构减小计算机内存访问。同时它也是一个很好锻炼栈这个数据结构的应用的问题。如下是用c语言实现中缀表达式到后缀表达式的转换的代码。本文仅讨论转换,不涉及计算。实际上若是了解了栈是如何在这上面应用,计算和前缀、中缀、后缀的相互计算和转换便简单了许多。对于三只种表达方式的转换,还有的作法是创建二叉树,录入数据,三种不一样的遍历方式就是三种表达方式。本文如有错误欢迎指出。数据结构
#include <stdio.h> int main(void) { int top=-1; char s[25],temp; //栈的大小根据须要更改,或者能够用内存分配来解决 while((temp=getchar())!='\n') { if(temp>='A'&&temp<='Z'||temp>='a'&&temp<='z'||temp>='0'&&temp<='9'||temp=='.') //包含数字表达式和字母表达式,支持小数 printf("%c",temp); else { if(temp=='*'||temp=='/') { while(top>=0&&(s[top]=='*'||s[top]=='/')) //保证栈不会越界 printf("%c",s[top--]); s[++top]=temp; } else if(temp=='+'||temp=='-') { while(s[top]!='('&&top>=0) printf("%c",s[top--]); s[++top]=temp; } else if(temp=='(') s[++top]=temp; else if(temp==')') { while(s[top]!='(') printf("%c",s[top--]); top--; } } } while(top>=0) printf("%c",s[top--]); //余下运算符出栈 return 0; }
在写判断条件时注意逻辑要清晰,肯定出入栈不会越界,并且全部元素都正确的出入栈,不要有出栈遗漏或者入栈重叠的状况,肯定全部转换条件都完整的进行了表达,注意某些特殊状况,尽可能作到全面。code