#include<iostream>
using namespace std;
typedef struct Lnode
{
<span style="white-space:pre"> </span>float xishu;
<span style="white-space:pre"> </span>int mici;
struct Lnode *next;
}Lnode,*Polynomial;#include<iostream>
#include"polynomial.h"
using namespace std;
void InitPoly(Polynomial &poly)
{
<span style="white-space:pre"> </span>poly = new Lnode;
<span style="white-space:pre"> </span>poly->next=NULL;
<span style="white-space:pre"> </span>Lnode * ptr=poly;
<span style="white-space:pre"> </span>float a;
<span style="white-space:pre"> </span>int b;
<span style="white-space:pre"> </span>while(1)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>cin>>a>>b;
<span style="white-space:pre"> </span>if(abs(a-0)<=1e-6 &&b==0)
<span style="white-space:pre"> </span>{//以0,0表示输入结尾
<span style="white-space:pre"> </span>cout<<"输入结束"<<endl;
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>Lnode *p=new Lnode;
<span style="white-space:pre"> </span>p->xishu=a;
<span style="white-space:pre"> </span>p->mici=b;
<span style="white-space:pre"> </span>p->next=NULL;//构造结点
<span style="white-space:pre"> </span>ptr->next=p;//尾插法,
<span style="white-space:pre"> </span>ptr=p;
<span style="white-space:pre"> </span>}
}
void DisplayPoly(Polynomial poly)
{//输出链表
<span style="white-space:pre"> </span>Lnode *p = poly->next;
<span style="white-space:pre"> </span>while(p)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>cout<<"("<<p->xishu<<","<<p->mici<<")";
<span style="white-space:pre"> </span>p=p->next;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>cout<<endl;
}
//void CopyPoly(Polynomial dis,Polynomial cour)
//{//复制多项式
//<span style="white-space:pre"> </span>dis->mici=dis->mici;
//<span style="white-space:pre"> </span>dis->xishu=dis->xishu;
//}
Polynomial AddPoly(Polynomial &pa,Polynomial pb)
{//多项式相加
<span style="white-space:pre"> </span>Polynomial pc= new Lnode;//新建一个多项式链表
<span style="white-space:pre"> </span>pc->next=NULL;
<span style="white-space:pre"> </span>Lnode *tpc;
<span style="white-space:pre"> </span>Lnode *tpa = pa->next;
<span style="white-space:pre"> </span>Lnode *tpb = pb->next;//分别指向当前结点
<span style="white-space:pre"> </span>Lnode *curr= pc;//尾插法构造PC时的当前指针
<span style="white-space:pre"> </span>while(tpa&&tpb)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if(tpa->mici==tpb->mici)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tpc = new Lnode;
<span style="white-space:pre"> </span>tpc->mici = tpa->mici;
<span style="white-space:pre"> </span>tpc->xishu = tpa->xishu+tpb->xishu;
<span style="white-space:pre"> </span>tpc->next = NULL;//构造pc的新节点
<span style="white-space:pre"> </span>if(tpc->xishu != 0)
<span style="white-space:pre"> </span>{//相加后的系数不为0,才加入链表pc
<span style="white-space:pre"> </span>curr->next = tpc;
<span style="white-space:pre"> </span>curr=tpc;//将新节点加入到pc中
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>tpa=tpa->next;
<span style="white-space:pre"> </span>tpb=tpb->next;//将pa,pb的指针都向后移
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else if(tpa->mici>tpb->mici)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tpc = new Lnode;
<span style="white-space:pre"> </span>tpc->mici = tpb->mici;
<span style="white-space:pre"> </span>tpc->xishu = tpb->xishu;
<span style="white-space:pre"> </span>tpc->next = NULL;//构造pc的新节点
<span style="white-space:pre"> </span>curr->next = tpc;
<span style="white-space:pre"> </span>curr=tpc;//将新节点加入到pc中
<span style="white-space:pre"> </span>tpb=tpb->next;//将pb的指针向后移
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else if(tpa->mici<tpb->mici)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tpc = new Lnode;
<span style="white-space:pre"> </span>tpc->mici = tpa->mici;
<span style="white-space:pre"> </span>tpc->xishu = tpa->xishu;
<span style="white-space:pre"> </span>tpc->next = NULL;//构造pc的新节点
<span style="white-space:pre"> </span>curr->next = tpc;
<span style="white-space:pre"> </span>curr=tpc;//将新节点加入到pc中
<span style="white-space:pre"> </span>tpa=tpa->next;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>while(tpa)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tpc = new Lnode;
<span style="white-space:pre"> </span>tpc->mici = tpa->mici;
<span style="white-space:pre"> </span>tpc->xishu = tpa->xishu;
<span style="white-space:pre"> </span>tpc->next = NULL;//构造pc的新节点
<span style="white-space:pre"> </span>curr->next = tpc;
<span style="white-space:pre"> </span>curr=tpc;//将新节点加入到pc中
<span style="white-space:pre"> </span>tpa=tpa->next;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>while(tpb)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tpc = new Lnode;
<span style="white-space:pre"> </span>tpc->mici = tpb->mici;
<span style="white-space:pre"> </span>tpc->xishu = tpb->xishu;
<span style="white-space:pre"> </span>tpc->next = NULL;//构造pc的新节点
<span style="white-space:pre"> </span>curr->next = tpc;
<span style="white-space:pre"> </span>curr=tpc;//将新节点加入到pc中
<span style="white-space:pre"> </span>tpb=tpb->next;//将pb的指针向后移
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return pc;
}
int main(void)
{
<span style="white-space:pre"> </span>Polynomial p1,p2,p3;
<span style="white-space:pre"> </span>/*输入多项式,并显示*/
<span style="white-space:pre"> </span>cout<<"请按幂次依次增大输入第一个多项式,以0,0结尾:"<<endl;
<span style="white-space:pre"> </span>InitPoly(p1);
<span style="white-space:pre"> </span>DisplayPoly(p1);
<span style="white-space:pre"> </span>cout<<"请按幂次依次增大输入第二个多项式,以0,0结尾:"<<endl;
<span style="white-space:pre"> </span>InitPoly(p2);
<span style="white-space:pre"> </span>DisplayPoly(p2);
<span style="white-space:pre"> </span>/*相加*/
<span style="white-space:pre"> </span>p3 = AddPoly(p1,p2);
<span style="white-space:pre"> </span>cout<<"相加后的多项式:"<<endl;
<span style="white-space:pre"> </span>DisplayPoly(p3);
<span style="white-space:pre"> </span>return 0;
}
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
</span></span>