727,uva problem
Posted: Tue Aug 27, 2013 11:02 pm
Problem ID:727
Here is my code:
//polish notation
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
char data;
struct node *next;
struct node *prev;
}node;
char a[1000][1000];
node* push(node *head,char ch)
{
node *cursor=head;
node *new_node=(node *)malloc(sizeof(node));
if(cursor==NULL)
{
new_node->next=NULL;
new_node->prev=NULL;
new_node->data=ch;
return new_node;
}
else
{
new_node->next=NULL;
new_node->data=ch;
cursor->next=new_node;
new_node->prev=cursor;
return new_node;
}
}
void pop(node *last)
{
node *back=last->prev;
if(back!=NULL)
{
back->next=NULL;
free(last);
}
}
node* my_fnc1(char output[],int *j,node *new_node)
{
node *first,*last,*p,*q;
node *cursor;
last=new_node;
cursor=new_node;
while(cursor->data!='(')
{
cursor=cursor->prev;
}
first=cursor;
cursor=last;
while(cursor!=first)
{
p=cursor;
cursor=cursor->prev;
if(p==last)
{
pop(p);
}
else if(p!=last)
{
output[*j]=p->data;
(*j)++;
pop(p);
}
}
q=cursor->prev;
pop(cursor);
return q;
}
int main()
{
node *new_node=NULL;
char input[1000];
char output[1000];
int i,n,k;
char ch;
char str[1000];
scanf("%d",&n);
getchar();
getchar();
for(k=0;k<n;k++)
{
i=0;
while(gets(str))
{
if(str[0]=='\0')
break;
ch=str[0];
input[i++]=ch;
}
input='\0';
strcpy(a[k],input);
}
for(k=0;k<n;k++)
{
int j=0;
new_node=push(new_node,'(');
for(i=0;a[k]!='\0';i++)
{
if(a[k]=='('||a[k]=='+'||a[k]=='-'||a[k]=='*'||a[k]=='/'||a[k]==')')
{
new_node=push(new_node,a[k]);
node *cursor=new_node;
node *p;
while((cursor->data=='+'||cursor->data=='-')&&(cursor->prev->data=='*'||cursor->prev->data=='/'))
{
p=cursor;
output[j]=cursor->prev->data;
j++;
cursor->prev->data=cursor->data;
cursor=cursor->prev;
pop(p);
new_node=cursor;
}
while((cursor->data=='/'&&cursor->prev->data=='*')||(cursor->data=='*'&&cursor->prev->data=='/')||(cursor->data=='+'&&cursor->prev->data=='-')||(cursor->data=='-'&&cursor->prev->data=='+'))
{
p=cursor;
output[j]=cursor->prev->data;
j++;
cursor->prev->data=cursor->data;
cursor=cursor->prev;
pop(p);
new_node=cursor;
}
if(new_node->data==')')
new_node=my_fnc1(output,&j,new_node);
}
else
{
output[j]=a[k];
j++;
}
}
new_node=push(new_node,')');
my_fnc1(output,&j,new_node);
output[j]='\0';
printf("%s\n\n",output);
}
return 0;
}
I can not understand why my code get RE .Please help me.
I did not get any reply though I sent another message .
Here is my code:
//polish notation
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
char data;
struct node *next;
struct node *prev;
}node;
char a[1000][1000];
node* push(node *head,char ch)
{
node *cursor=head;
node *new_node=(node *)malloc(sizeof(node));
if(cursor==NULL)
{
new_node->next=NULL;
new_node->prev=NULL;
new_node->data=ch;
return new_node;
}
else
{
new_node->next=NULL;
new_node->data=ch;
cursor->next=new_node;
new_node->prev=cursor;
return new_node;
}
}
void pop(node *last)
{
node *back=last->prev;
if(back!=NULL)
{
back->next=NULL;
free(last);
}
}
node* my_fnc1(char output[],int *j,node *new_node)
{
node *first,*last,*p,*q;
node *cursor;
last=new_node;
cursor=new_node;
while(cursor->data!='(')
{
cursor=cursor->prev;
}
first=cursor;
cursor=last;
while(cursor!=first)
{
p=cursor;
cursor=cursor->prev;
if(p==last)
{
pop(p);
}
else if(p!=last)
{
output[*j]=p->data;
(*j)++;
pop(p);
}
}
q=cursor->prev;
pop(cursor);
return q;
}
int main()
{
node *new_node=NULL;
char input[1000];
char output[1000];
int i,n,k;
char ch;
char str[1000];
scanf("%d",&n);
getchar();
getchar();
for(k=0;k<n;k++)
{
i=0;
while(gets(str))
{
if(str[0]=='\0')
break;
ch=str[0];
input[i++]=ch;
}
input='\0';
strcpy(a[k],input);
}
for(k=0;k<n;k++)
{
int j=0;
new_node=push(new_node,'(');
for(i=0;a[k]!='\0';i++)
{
if(a[k]=='('||a[k]=='+'||a[k]=='-'||a[k]=='*'||a[k]=='/'||a[k]==')')
{
new_node=push(new_node,a[k]);
node *cursor=new_node;
node *p;
while((cursor->data=='+'||cursor->data=='-')&&(cursor->prev->data=='*'||cursor->prev->data=='/'))
{
p=cursor;
output[j]=cursor->prev->data;
j++;
cursor->prev->data=cursor->data;
cursor=cursor->prev;
pop(p);
new_node=cursor;
}
while((cursor->data=='/'&&cursor->prev->data=='*')||(cursor->data=='*'&&cursor->prev->data=='/')||(cursor->data=='+'&&cursor->prev->data=='-')||(cursor->data=='-'&&cursor->prev->data=='+'))
{
p=cursor;
output[j]=cursor->prev->data;
j++;
cursor->prev->data=cursor->data;
cursor=cursor->prev;
pop(p);
new_node=cursor;
}
if(new_node->data==')')
new_node=my_fnc1(output,&j,new_node);
}
else
{
output[j]=a[k];
j++;
}
}
new_node=push(new_node,')');
my_fnc1(output,&j,new_node);
output[j]='\0';
printf("%s\n\n",output);
}
return 0;
}
I can not understand why my code get RE .Please help me.
I did not get any reply though I sent another message .