是数据进数据栈,出现运算符号的时候两个数据出栈,结果数据进栈,这是用栈运算后缀表达式的方法
而判断的方法完全一样,只要保证最后栈中只有一个数据就可以,当然知道原理(栈的思想)不需要用栈,只要记录"栈"中数据的个数就可以
给你看代码吧,思想是把ab+转化到前缀显然很简单+ab就可以,当然a也可以是一个子表达式而不只是一个变量,那么我们可以利用栈来模拟后缀表达式的计算,与前面不同的是栈内存的运算结果不是数字,而是该表达式对应的前缀表达式,显然每次运算都是 ab+这种情况,其中a,b都已经是前缀表达式.
不过我觉得这么实现起来还是用树效率高.
#include <stdio.h>
#include <string.h>
#define SMAX 30
#define LMAX 512
char stack[SMAX][LMAX];
long s_top;
void trans(char c)
{
char tmp[LMAX];
tmp[0]=c;tmp[1]='\0';s_top--;
strcat(tmp,stack[s_top-1]);
strcat(tmp,stack[s_top]);
strcpy(stack[s_top-1],tmp);
}
void push(char c)
{
stack[s_top][0]=c;
stack[s_top][1]='\0';
s_top++;
}
#define Case1 case '+': case '-': case '*': case '/'
void translate(void)
{
char c;
s_top=0;
while(1){
c=getchar();
switch(c){
Case1 : trans(c); break;
case '\n': return ; break;
default : push(c); break;
}
}
}
int main()
{
printf("Please input the expression\n");
translate();
printf("The translated expression is:\n");
printf("%s\n",stack[0]);
getch();
return 0;
}
[此贴子已经被作者于2006-6-28 13:47:55编辑过]