一元多项式相加 数据结构

#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int coaf,exp;
struct node *next;
}node ,*link;
void create(link &head)
{
link p;int x,y;
head=(link)malloc(sizeof(node));
p=head;
printf("系数 指数");
scanf("%d ,%d",&x,&y);
//小到大
while(x!=0||y!=0)
{
p->next=(link)malloc(sizeof(node));
p=p->next;p->coaf=x;p->exp=y;
printf("系数 指数");
scanf("%d ,%d",&x,&y);
}
p->next=NULL;
}
void add(link &A,link &B)
{
link p,pre,r,u;
p=A->next;pre=A;r=B->next;
while(p&&r)
{
if(p->exp<r->exp)
{
pre=p;p=p->next;
}
else if(p->exp>r->exp)
{
u=r->next;
r->next=pre->next;pre->next=r;
pre=r;r=u;
}
else if(p->exp=r->exp)
{int x;x=p->coaf+r->exp;
if(x==0)
{
pre->next=pre->next->next;free(p);pre=pre->next;
p=pre->next;
}
else {
p->coaf=x;
}
u=r;r=r->next;free(u);
}
}
if(r) pre->next=r;
}
void out(link head)
{
link p;
while(p)
{
printf("%d ,%d",p->coaf,p->exp);
p=p->next;
}
}
main()
{
link A,B;
printf("A:");
create(A);
printf("B:");
create(B);
out(A);
out(B);
add(A,B);
out(A);
}
错在哪里???

第1个回答  2014-05-07
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int coaf,exp;
struct node *next;
}node ,*link;

void create(link &head)
{
link p;
int x,y;
head=(link)malloc(sizeof(node));
p=head;
printf("系数 指数\n"); //加个换行好看
scanf("%d%d",&x,&y); //不用逗号
//小到大
while(x!=0||y!=0)
{
p->next=(link)malloc(sizeof(node));
p=p->next;
p->coaf=x;
p->exp=y;
printf("系数 指数\n"); //加个换行好看
scanf("%d%d",&x,&y); //不用逗号
}
p->next=NULL;
printf("输入结束\n"); //这里感觉可以加个结束标识
}

void add(link &A,link &B)
{
link p,pre,r,u;

p=A->next;
pre=A;
r=B->next;

while(p&&r)
{
if(p->exp < r->exp)
{
pre=p;
p=p->next;
}
else if(p->exp > r->exp)
{
u=r->next;
r->next=pre->next;
pre->next=r;
pre=r;
r=u;
}
else if(p->exp == r->exp) //符号是==
{
int x;
x=p->coaf+r->coaf;
//这里是coaf。下面x==0,是怕-1x + 1x这种。
//也可以多考虑一下,比如输入了这组数据 1+2x2+3x3+0x4 和 2+3x+2x2;
//或者是 1+2x2+3x3 和 2+3x+2x2+0x4;
//感觉可以在输入建表的时候就直接忽略 0x某某次方这种。
if(x==0)
{
pre->next=pre->next->next;
free(p);
pre=pre->next;
if(pre != NULL) {
p = pre->next; //这里pre可能为空
}
else {
p = NULL;
}

}
else {
p->coaf=x;
pre = p; //p也要前进
p = p->next;
}
u=r;
r=r->next;
free(u);
}
}
if(r) pre->next=r;
}

void out(link head)
{
link p = head->next; //head根本没用
while(p)
{
printf("%d ,%d\n",p->coaf,p->exp); //加个换行好看
p=p->next;
}
printf("输出结束\n"); //这里感觉可以加个结束标识
}

main()
{
link A,B;
printf("A:");
create(A);
printf("B:");
create(B);
out(A);
out(B);
add(A,B);
out(A);
}本回答被提问者采纳
相似回答