希望学长的代码能给大二西电er们带来帮助(大家一定要好好学习数据结构,合理利用资源)
大家找到了什么bug或有什么改进意见可以私信我或在下方留言,我都会看的
不多说废话直接上代码
#include<malloc.h>
#include<stdio.h>
//多项式单链表结构类型定义
typedef struct node
{
int coef;
int exp;
struct node *next;
}linklist;
linklist* init()
{
linklist *head = (linklist*)malloc(sizeof(linklist));
head->coef = 0;
head->exp = -1;
head->next = NULL;
return head;
}
linklist* create()
{
int coef;
int exp;
linklist *head = init();
linklist *s,*r;
r=head;
while(1)
{
scanf("%d %d",&coef,&exp);
if(coef!=0)//输入0 0来结束输入
{
s=(linklist*)malloc(sizeof(linklist));
s->coef=coef;//s用来保存当前节点
s->exp=exp;
r->next=s;
r=s;
}
else
break;
}
r->next=NULL ;//尾插法建立单链表
return head;
}
void print(linklist *head)// 输出多项式信息
{
linklist *p;
p=head->next;
while(p!=NULL)
{
printf("(%d,%d),",p->coef,p->exp);
p=p->next;
}
printf("\n");
}
linklist* sum(linklist *pa,linklist *pb)//进行多项式相加
{
linklist *p,*q,*r,*s;
int x;
p=pa->next;//分别指向多项式的第一项
q=pb->next;
s=pa;//s用于保存当前节点
while((p!=NULL)&&(q!=NULL))
{
if(p->exp<q->exp)//p的指数小于q的指数,将p放入链表中
{
s=p;
p=p->next;
}
else if(p->exp>q->exp)//p的指数大于q的指数,将q放入链表中
{
r=q->next;
q->next=p;
s->next=q;
s=q;
q=r;
}
else//当两者指数相同时,进行合并
{
x=p->coef+q->coef;
if(x!=0)
{
p->coef=x;
s=p;
}
else//若合并结果为0,将该节点移除
{
s->next=p->next;
free(p);
}
p=s->next;
r=q;
q=q->next;
free(r);
}
}
if(p)
s->next=p;
else
s->next=q;
return pa;
}
linklist* copy(linklist *L)
{
linklist* NL=init();//新链表初始化
linklist* pb=NL; //新链表还没有值,指向头指针
linklist* pa=L->next;
while(pa!=NULL)
{
linklist *l = new linklist; //为新节点开辟内存空间
l->coef=pa->coef;
l->exp=pa->exp;
//尾插法
l->next=NULL;
pb->next=l;
//保证指针始终指向最后一个节点
pb = pb->next;
pa = pa->next;
}
return NL;
}
int main()
{
linklist *A,*B,*C,*D,*E;
printf("**************请输入原多项式A链表为*****************\n");
A=create( );
D=copy(A);
printf("**************请输入原多项式B链表为*****************\n");
B=create( );
E=copy(B);
printf("\n**************显示原多项式A链表为*****************\n");
print(A);
printf("\n**************显示原多项式B链表为*****************\n");
print(B);
C=sum(D,E);//调用多项式求和的函数
printf("\n**************显示求和运算之后的多项式A链表为*****************\n");
print(A);
printf("\n**************显示求和运算之后的多项式B链表为*****************\n");
print(B);
printf("\n**************显示求和运算之后的多项式之和C链表为*****************\n");
print(C);
}