明明可以在dev上跑,为啥提交时过不了。显示编译错误
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct Stack
{
int data1;
char data2;
struct Stack* next;
}LinkStackNode,LinkStack;
typedef struct Node
{
int data3;
struct Node next;
}Node,LinkList;
LinkStackNode Push(LinkStack top)
{
LinkStackNode* p;
p=(LinkStack)malloc(sizeof(LinkStackNode));
p->next=top->next;
top->next=p;
return p;
}
void Pop(LinkStack top)
{
LinkStackNode* p;
p=top->next;
if(p!=NULL)
{
top->next=top->next->next;
free(p); p=NULL;
}
}
Node* CreateNode(Node q)
{
Node p;
p=(LinkList)malloc(sizeof(Node));
p->next=NULL;
q->next=p;
return p;
}
int main()
{
char b;
int a,c=0,d,i;
char A[100];
LinkList L;
LinkStack top;
Node *p,*q;
LinkStackNode *r,*t,*z;
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
top=(LinkStack)malloc(sizeof(LinkStackNode));
top->next=NULL;
p=L;
for(i=0;i<100;i++)
{
scanf("%c",&b);
if(b=='\n')
break;
A[i]=b;
c++;
}
for(i=0;i<c;i++)
{
switch(A[i])
{
case '+':
case'-':
a = 1;
break;
case'*':
case'/':
a = 2;
break;
default:
a = 3;
}
if(A[i] !='+'&&A[i]!='-'&&A[i]!='*'&&A[i]!='/'&&A[i]!='('&&A[i]!=')'&&A[i]!='%')
{
q=CreateNode(p);
q->data3=A[i];
p=q;
}
if(A[i]=='(')
{
z=Push(top);
z->data1=a;
z->data2=A[i];
}
else if(A[i]=='+'||A[i]=='-'||A[i]=='*'||A[i]=='/'||A[i]=='%')
{
while(top->next!=NULL&&top->next->data1>=a&&top->next->data2!='(' )
{
q=CreateNode(p);
q->data3=top->next->data2;
p=q;
Pop(top);
}
z=Push(top);
z->data1=a;
z->data2=A[i];
}
else if(A[i]==')')
{
while(top->next->data2!='(')
{
q=CreateNode(p);
q->data3=top->next->data2;
p=q;
Pop(top);
}
if(top->next->data2=='(')
Pop(top);
}
}
while(top->next!=NULL)
{
q=CreateNode(p);
q->data3=top->next->data2;
p=q;
Pop(top);
}
p=L->next;
while(p!=NULL)
{
printf("%c",p->data3);
p=p->next;
}
return 0;
}
代码丢失了很多*号,代码重新调试了一下:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct Stack
{
int data1;
char data2;
struct Stack* next;
}LinkStackNode, *LinkStack;
typedef struct Node
{
int data3;
struct Node *next;
}Node, *LinkList;
LinkStackNode* Push(LinkStack top)
{
LinkStackNode* p;
p = (LinkStack)malloc(sizeof(LinkStackNode));
p->next = top->next;
top->next = p;
return p;
}
void Pop(LinkStack top)
{
LinkStackNode* p;
p = top->next;
if (p != NULL)
{
top->next = top->next->next;
free(p); p = NULL;
}
}
Node* CreateNode(Node* q)
{
Node* p;
p = (LinkList)malloc(sizeof(Node));
p->next = NULL;
q->next = p;
return p;
}
int main()
{
char b;
int a, c = 0, d, i;
char A[100];
LinkList L;
LinkStack top;
Node* p, * q;
LinkStackNode* r, * t, * z;
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
top = (LinkStack)malloc(sizeof(LinkStackNode));
top->next = NULL;
p = L;
for (i = 0; i < 100; i++)
{
scanf("%c", &b);
if (b == '\n')
break;
A[i] = b;
c++;
}
for (i = 0; i < c; i++)
{
switch (A[i])
{
case '+':
case'-':
a = 1;
break;
case'*':
case'/':
a = 2;
break;
default:
a = 3;
}
if (A[i] != '+' && A[i] != '-' && A[i] != '*' && A[i] != '/' && A[i] != '(' && A[i] != ')' && A[i] != '%')
{
q = CreateNode(p);
q->data3 = A[i];
p = q;
}
if (A[i] == '(')
{
z = Push(top);
z->data1 = a;
z->data2 = A[i];
}
else if (A[i] == '+' || A[i] == '-' || A[i] == '*' || A[i] == '/' || A[i] == '%')
{
while (top->next != NULL && top->next->data1 >= a && top->next->data2 != '(')
{
q = CreateNode(p);
q->data3 = top->next->data2;
p = q;
Pop(top);
}
z = Push(top);
z->data1 = a;
z->data2 = A[i];
}
else if (A[i] == ')')
{
while (top->next->data2 != '(')
{
q = CreateNode(p);
q->data3 = top->next->data2;
p = q;
Pop(top);
}
if (top->next->data2 == '(')
Pop(top);
}
}
while (top->next != NULL)
{
q = CreateNode(p);
q->data3 = top->next->data2;
p = q;
Pop(top);
}
p = L->next;
while (p != NULL)
{
printf("%c", p->data3);
p = p->next;
}
return 0;
}