链表-多项式相加

#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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值