#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct Polynode
{
int coef;
int exp;
struct Polynode *next;
}Polynode,*Polylist;
//均使用尾插法
Polylist PolyCreate()
{
Polynode * head, *rear,*s;
int c,e;
head=(Polynode *)malloc(sizeof(Polynode)); //建立多项式的头结点,多个头结点,记录了最原始的头结点位置
rear=head; //尾时钟指向单链表的尾,便于尾插法建表
scanf("%d,%d",&c,&e); //输入多项式的系数和指数项
while(c!=0) //若c=0,则代表多项式的输入结束
{
s=(Polynode *)malloc(sizeof(Polynode));
s->coef=c;
s->exp=e;
rear->next=s;
rear=s;
scanf("%d,%d",&c,&e);
}
rear->next=NULL;
return(head);
}
void PolyAdd(Polylist polya, Polylist polyb) //将两个多项式相加,然后将和多项式存放在polya,并将polyb删除
{
Polynode *p,*q,*tail,*temp;
int sum;
p=polya->next; //令p和q分别指向polya和polyb多项式链表中的第一个节点
q=polyb->next;
tail=polya; //tail指向和多项式的尾结点
//引用tail 既可创建新的和多项式链表
//也可以将单链表polyb 的结点插入到单链表polya中,tail是插入后的a
//本程序tail是插入后的a
while(p!=NULL &&q!=NULL)
{
if(p->exp < q->exp)
//规则(1): p指向的多项式指数小于q的指数,将p结点缴入到和多项式中
{
tail->next=p;
tail=p;
p=p->next;
}
//规则(2):若指数相等,将p结点加入到和多项式中
else if(p->exp == q->exp)
{
sum=p->coef+q->coef;
if(sum!=0) //系数和非0,则系数和置入结点p,加入到和多项式,释放结点,并将指针后移
{
p->coef=sum;
tail->next=p; tail=p;
p=p->next;
temp=q; q=q->next;free(temp);
}
else //系数和为0,则删除结点p与q,并将指针指向下一结点
{
temp=p; p=p->next; free(temp);
temp=q; q=q->next; free(temp);
}
}
else //规则(3):将q节点加入到“和多项式中”
{
tail->next =q; tail=q;
q=q->next;
}
}
if(p!=NULL) //多项式A中还有剩余,则将剩余的结点加入到和多项式中
tail->next=p;
else // 否则,将B中的结点加入到和多项式中。
tail->next =q;
}
int main()
{
return 0;
}