该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
无语法错误,但不能运行。
#include
#include
struct node;
typedef struct node* pnode;
struct node{
int x; /*系数*/
int y; /*次数*/
pnode p;
};
typedef struct node* linklist;
pnode creatnode(void);
linklist creatlist(void);
linklist input(void);
void freeall(linklist list);
linklist add(linklist list1,linklist list2);
linklist multi(linklist list1,linklist list2);
int connect(int a,int b,pnode pk);
void print(linklist list);
/*前面是声明部分*/
void main()
{
linklist list1=input(); /*输入多项式1*/
if(list1==NULL)
return;
linklist list2=input(); /*输入多项式2*/
if(list2==NULL)
return;
linklist out_add=add(list1,list2);
if(out_add==NULL)
return;
linklist out_multi=multi(list1,list2);
if(out_multi==NULL)
return;
print(out_add);
print(out_multi);
}
linklist input(void) /*输入多项式每一项的系数和次数,并把它们储存在单链表中,返回地址*/
{
linklist list=creatlist();
if(list==NULL)
return(NULL);
int a,b;
pnode q=list;
scanf("%d%d",&a,&b); /*a为系数,b为次数*/
while(a!=0||b!=0)
{
pnode pn=creatnode();
if(pn!=NULL)
{
pn->x=a;
pn->y=b;
q->p=pn;
q=q->p;
}
else
{
freeall(list);
return(NULL);
}
scanf("%d%d",&a,&b);
}
return(list);
}
linklist creatlist(void) /*创建一个不带头节点的空链表*/
{
linklist list=(linklist)malloc(sizeof(struct node));
if(list==NULL)
printf("out of space!\n");
return(list);
}
linklist creatnode(void) /*创建一个节点*/
{
pnode pn=(pnode)malloc(sizeof(struct node));
if(pn!=NULL) pn->p=NULL;
else printf("out of space!\n");
return(pn);
}
void freeall(linklist list)
{ /*释放所有节点*/
pnode ph=list,ph2=list->p;
while(ph!=NULL)
{
free(ph);
ph=ph2;
if(ph2->p!=NULL)
ph2=ph2->p;
}
}
linklist add(linklist list1,linklist list2) /*计算相加*/
{
linklist out_add=creatlist();
if(out_add==NULL)
return(NULL);
pnode locate1=list1,locate2=list2,locate3=out_add;
while(locate1!=NULL&&locate2!=NULL)
{
if(locate1->y==locate2->y)
{ if(connect(locate1->x+locate2->x,locate1->y,locate3))
{locate1=locate1->p;
locate2=locate2->p;}
else
{freeall(out_add);return(NULL);
}
}
else
{
if(locate1->y>locate2->y)
{
if(connect(locate1->x,locate1->y,locate3))
locate1=locate1->p;
else
{freeall(out_add);return(NULL);
}
}
else
{
if(connect(locate2->x,locate2->y,locate3))
locate2=locate2->p;
else
{freeall(out_add);return(NULL);
}
}
}
locate3=locate3->p;
}
return(out_add);
}
int connect(int a,int b,pnode pk)
{ pnode p1=creatnode();
if(p1!=NULL)
{p1->x=a;
p1->y=b;
pk->p=p1;
return(1);}
else {printf("out of space!");
return(0);}
}
linklist multi(linklist list1,linklist list2) /*计算相乘*/
{ linklist out_multi=creatlist();
if(out_multi==NULL)
return(NULL);
pnode locate1=list1,locate2=list2,locate3=out_multi;
while(locate1!=NULL)
{
while(locate2!=NULL)
{ locate3=out_multi;
while(locate3!=NULL)
{
if(locate3->y==locate1->y+locate2->y)
{locate3->x=locate3->x+locate1->x*locate2->x;break;}
else
{if(locate3->y>locate1->y+locate2->y&&locate3->p->yy+locate2->y)
{
pnode pd=creatnode();
if(pd==NULL)
{ freeall(out_multi);return(NULL);
}
pd->x=locate1->x*locate2->x;
pd->y=locate1->y+locate2->y;
pnode pl=locate3->p;
locate3->p=pd;
pd->p=pl;
break;
}
else
locate3=locate3->p;
}
}
locate2=locate2->p;
}
locate3=locate3->p;
}
return(out_multi);
}
void print(linklist list)
{
pnode ph=list;
while(ph->p!=NULL)
{printf("%dx%d+",ph->x,ph->y);
ph=ph->p;}
if(ph->y!=0)
printf("%dx%d",ph->x,ph->y);
else
printf("%d",ph->x);
}