两个以单链表作存储结构的一元多项式A和B,编写算法将多项式A和B相加,要求利用原表的结点空间和多项式.

问题描述:

两个以单链表作存储结构的一元多项式A和B,编写算法将多项式A和B相加,要求利用原表的结点空间和多项式.
1个回答 分类:综合 2014-12-14

问题解答:

我来补答
#include
#include
#include
typedef struct
{
float coef;
int expn;
}
ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}
LNode,*LinkList;
LinkList InitList()//创建链表
{
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return(L);
}
void InsLNode(LinkList L,ElemType x)//插入链表函数
{
LinkList s,p;
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
p=L;
while(p->next)
p=p->next;
s->next=NULL;
p->next=s;
}
void AddPolyn(LinkList pa,LinkList pb)//多项式相加
{
LinkList ha,hb,qa,qb;
float sum;int a,b;
ha=pa;hb=pb;
qa=ha->next;qb=hb->next;
while(qa&&qb)
{
a=qa->data.expn;b=qb->data.expn;;
if(anext;
}
if(a==b)
{
sum=qa->data.coef+qb->data.coef;
if(sum!=0)
{
qa->data.coef=sum;
ha=qa;
qa=qa->next;
hb->next=qb->next;
free(qb);
qb=hb->next;
}
else
{
ha->next=qa->next;
free(qa);qa=ha->next;
hb->next=qb->next;
free(qb);
qb=hb->next;
}
}
if(a>b)
{
hb->next=qb->next;qb->next=ha->next;
ha->next=qb;
ha=qb;
free(qb);
qb=hb->next;
}
}
if(qb)
ha->next=qb;
free(hb);
}
void Invert(LinkList L)//逆序输出链表
{LinkList p,q,r;
p=L->next;
q=p->next;
while(q!=NULL)
{r=q->next;
q->next=p;
p=q;
q=r;
}L->next->next=NULL;
L->next=p;
}
void Print(LinkList L)//输出多项式
{
LinkList p;
p=L->next;
while(p->next)
{
printf("%fx^%d+",p->data.coef,p->data.expn);
p=p->next;
}
printf("%fx^%d",p->data.coef,p->data.expn);
}
void main()
{
LinkList La,Lb;ElemType c;
int a,i;
La=InitList();
Lb= InitList();
printf("输入La的项数:");
scanf("%d",&a);
for(i=0;i
 
 
展开全文阅读
剩余:2000