编译失败
背景 以下是几个标准的表达式:
5 * 2 + -3
5 * (2 + -3)
5 + ((-4 * -5) + (((5 + (6 - 2)) * 7 + ((4 + 2) * (3 - 1))))
与之等价的波兰表达式为
+ * 5 2 -3
* 5 + 2 -3
+ 5 + * -4 -5 + * + 5 - 6 2 7 * + 4 2 - 3 1
在普通的表达式中,符号是位于运算对象之间的,而在波兰表达式中,运算符号位于参与运算的对象之前。
波兰式在计算中的价值在于它不需要使用括号,之所以如此是由于波兰式的操作符的先后顺序是明确的。
如果我们用 P 表示波兰表达式,用 O 表示操作符,用 D 表示数字,则可以将波兰表达式定义为 P = O P P 或 P = D。
任务
编写程序计算波兰表达式的值。
输入
输入第一行是一个整数,表示输入文件中共有几个波兰式,之后每一行是一个波兰表达式。
每个表达式包含数字和二元操作符 +、-、*,操作数和运算结果都在 [-101000, 101000] 之间。
可以假设每行的数据(运算符号和数字)总共不超过 100 个。
输出
对每个表达式输出其值。
----------------解决方案--------------------------------------------------------
回复 1# 的帖子
#include <stdio.h>#include <alloc.h>
#include <stdlib.h>
typedef struct node{
char ch;
int flag;
long m;
struct node*next;}NODE;
NODE* f1(char* point);
NODE* f2(NODE* head);
void main(void)
{int n;
int i;
NODE* HEAD;
char* pointer;
long mm;
printf("Please input BOLAN numbers:\n");
scanf("%ld",&n);
for(i=0;i<n;i++)
{printf("Please input the %d BOLAN :\n",i);
gets(pointer);
HEAD=f1(pointer);
while(HEAD->next)
HEAD=f2(HEAD);
mm=HEAD->m;
printf("%s result is %ld\n",pointer,mm);
}
}
NODE* f1(char* point)
{NODE* head,last,p;
char* temp;
head=(NODE*)malloc(sizeof(NODE));
if(!head)
exit(1);
last=head;
last->next=NULL;
while(*point)
{switch(*point)
{case '+' : {p=(NODE*)malloc(sizeof(NODE));
p->ch='+';
p->flag=0;
p->next=NULL;
last->next=p;
last=p;
point=point+2;
break;}
case '*' : {p=(NODE*)malloc(sizeof(NODE));
p->ch='*';
p->flag=0;
p->next=NULL;
last->next=p;
last=p;
point=point+2;
break;}
case '-' : {if(*(point+1)==' ')
{p=(NODE*)malloc(sizeof(NODE));
p->ch='+';
p->flag=0;
p->next=NULL;
last->next=p;
last=p;
point=point+2;
break;}
else
{while(*point!=' ')
*temp++=*point++;
if(last->flag==0)
last->m=atol(temp);
else
{p=(NODE*)malloc(sizeof(NODE));
p->ch='\0';
p->flag=1;
p->m=atol(temp);
last->next=p;
last=p;p->next=NULL;}
point=point+1;
break;
}
default:{while(*point!=' ')
*temp++=*point++;
if(last->flag==0;)
last->m=atol(temp);
else
{p=(NODE*)malloc(sizeof(NODE));
p->ch='\0';
p->flag=1;
p->m=atol(temp);
last->next=p;
last=p;p->next=NULL;}
point=point+1;
break;
}
}
}
return head;
}
NODE* f2(NODE* head)
{
NODE* p,l,q;
l=p=head;
while(p->next)
{switch(p->ch)
{case '+' : {if(p->flag==1&&!p->next->ch)
{p->m=p->m+p->next->m;
q=p->next;
p->next=q->next;
free(q);}
p=p->next;
break;
}
case '*' : {if(p->flag==1&&!p->next->ch)
{p->m=p->m*p->next->m;
q=p->next;
p->next=q->next;
free(q);}
p=p->next;
break;
}
case '-' : {if(p->flag==1&&!p->next->ch)
{p->m=p->m-p->next->m;
q=p->next;
p->next=q->next;
free(q);}
p=p->next;
break;
}
default:{p=p->next;break;}
}
}
return l;
}
----------------解决方案--------------------------------------------------------
编译说是结构体声明错误
不知道怎么回事?
----------------解决方案--------------------------------------------------------
编译说是结构体声明失误不知道怎么回事?
----------------解决方案--------------------------------------------------------
用vc编译了下,,错误太多了
至少也因该是
NODE *p,*last....
[[it] 本帖最后由 qfyzy 于 2008-3-23 11:27 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我用TC编错误就是结构体指针的问题
----------------解决方案--------------------------------------------------------
NODE* head,last,p
等于 struct node *head,last,p;
不等于struct node *heas,*last,*p
怎么能不出错
----------------解决方案--------------------------------------------------------
原来是这样啊
----------------解决方案--------------------------------------------------------
回复 7# 的帖子
谢谢了啊 ----------------解决方案--------------------------------------------------------