我这个 一元多项式相加 结果的系数为什么不变呢?(万分感谢)
#include "stdlib.h"
typedef struct LNode
{
int coef;
int expn;
struct LNode *next;
}LNode,*ListNode;
ListNode CreateFromTail()
{
ListNode l,p,tail;
int m;
int n;
l=(ListNode)malloc(sizeof(LNode));
l->next=NULL;
tail=l;
printf("\nplease put the coef:");
scanf("%d",&m);
printf("\nplease put the expn:");
scanf("%d",&n);
while(m)
{
p=(ListNode)malloc(sizeof(LNode));
p->coef=m;
p->expn=n;
tail->next=p;
tail=p;
printf("\nplease put the coef:");
scanf("%d",&m);
printf("\nplease put the expn:");
scanf("%d",&n);
}
tail->next=NULL;
return l;
}
ListNode MergeList(ListNode la,ListNode lb)
{
ListNode ra,rb,pa,pb;
int sum;
ra=la;
rb=lb;
pa=la->next;
pb=la->next;
while(pa&&pb)
{
if(pa->expn>pb->expn)
{
ra=ra->next;
pa=pa->next;
}
else if(pa->expn <pb->expn)
{
rb->next=pb->next;
pb->next=ra->next;
ra->next=pb;
ra=ra->next;
pa=ra->next;
pb=rb->next;
}
else
{
if((pa->coef+pb->coef)!=0)
{
sum=pa->coef+pb->coef;
pa->coef=sum;
ra=ra->next;
pa=pa->next;
rb=rb->next;
pb=pb->next;
}
else
{
pa=pa->next;
pb=pb->next;
ra->next=pa;
rb->next=pb;
}
}
}
if(pb)
ra->next=pb;
free(lb);
return la;
}
main()
{
ListNode m,n,l,p;
printf("the first equation:");
m=CreateFromTail();
printf("\n");
printf("the second equation:");
n=CreateFromTail();
l=MergeList(m,n);
p=l->next;
while(p!=NULL)
{
printf(" %d %d\t",p->coef,p->expn);
p=p->next;
}
}
typedef struct LNode
{
int coef;
int expn;
struct LNode *next;
}LNode,*ListNode;
ListNode CreateFromTail()
{
ListNode l,p,tail;
int m;
int n;
l=(ListNode)malloc(sizeof(LNode));
l->next=NULL;
tail=l;
printf("\nplease put the coef:");
scanf("%d",&m);
printf("\nplease put the expn:");
scanf("%d",&n);
while(m)
{
p=(ListNode)malloc(sizeof(LNode));
p->coef=m;
p->expn=n;
tail->next=p;
tail=p;
printf("\nplease put the coef:");
scanf("%d",&m);
printf("\nplease put the expn:");
scanf("%d",&n);
}
tail->next=NULL;
return l;
}
ListNode MergeList(ListNode la,ListNode lb)
{
ListNode ra,rb,pa,pb;
int sum;
ra=la;
rb=lb;
pa=la->next;
pb=la->next;
while(pa&&pb)
{
if(pa->expn>pb->expn)
{
ra=ra->next;
pa=pa->next;
}
else if(pa->expn <pb->expn)
{
rb->next=pb->next;
pb->next=ra->next;
ra->next=pb;
ra=ra->next;
pa=ra->next;
pb=rb->next;
}
else
{
if((pa->coef+pb->coef)!=0)
{
sum=pa->coef+pb->coef;
pa->coef=sum;
ra=ra->next;
pa=pa->next;
rb=rb->next;
pb=pb->next;
}
else
{
pa=pa->next;
pb=pb->next;
ra->next=pa;
rb->next=pb;
}
}
}
if(pb)
ra->next=pb;
free(lb);
return la;
}
main()
{
ListNode m,n,l,p;
printf("the first equation:");
m=CreateFromTail();
printf("\n");
printf("the second equation:");
n=CreateFromTail();
l=MergeList(m,n);
p=l->next;
while(p!=NULL)
{
printf(" %d %d\t",p->coef,p->expn);
p=p->next;
}
}
...全文
相关推荐
c语言 两个一元多项式相加。
用线性表的存储形式实现两个一元多项式相加。
一元多项式相加的链式存储实现
本文实现了一元多项式的链式存储及相加运算。采用单链表结构存储多项式,每个节点包含系数(coef)和指数(expn)。主要实现了多项式初始化、创建、排序及相加功能。其中AddPoly函数通过比较两个多项式链表的指数项,将结果按指数升序合并:指数小的优先插入,指数相等则系数相加。测试用例展示了多项式(3x+7+5x^17+9x^8)与(-9x^8+8x+22x^7)相加的过程和结果。程序输出包括原始多项式、排序后多项式及相加结果,验证了算法的正确性。
C++ 链表实现两个一元多项式相加
c++,算法链表实现一元多项式相加,通过链表实现,非常好的一个程序
一元多项式相加实验报告(C语言实现)
一元多项式相加实验报告(C语言实现)
一元多项式相加c实现
c语言实现一元多项式相加,用两种方法实现,数组和链表!


