C语言输入三个数降次排序,帮忙找错——用链表的知识求两个多项式的和 积(输入输出都用降幂...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

无语法错误,但不能运行。

#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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值