一,链表一元多项式
题目如下:
自定义一元多项式中的“项”结构,自定义一元多项式的链表结构。
设计函数Add(……),用于实现两个多项式的加法运算。
编写main()函数,分别读入两个多项式的数据,创建两个多项式链表。利用Add等函数,实现两个多项式的加法运算,并输出“多项式之和”的数据。要求按照多项式的幂的降序输出。
————————————————
版权声明:本文为CSDN博主「alyx27」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/alyx27/article/details/121904141
#include <iostream>
#include <fstream>
using namespace std;
struct Poly
{
int coef;
int index;
Poly *next;//多了个next域;
friend ostream & operator<<(ostream &out, Poly &p)
{
return out<<p.coef<<" "<<p.index<<endl;
}
};
class PolyList
{
Poly *Head;
public:
PolyList()
{
Head=NULL;
int n; cin>>n;
for(int i=0; i<n; i++)
{
Poly *newp =new Poly;
cin>>newp->coef>>newp->index;
Insert(newp); // 按照指数降序插入*newp;
}
}
// 按照指数降序插入*newp
void Insert(Poly *newp)
{
Poly *prev=NULL, *p=Head;
for(; p!=NULL; prev=p,p=p->next)
if(p->index <= newp->index)
break;
if(p!=NULL && p->index==newp->index)
{
// 同类项;
p->coef += newp->coef;
delete newp;
if(p->coef==0)
{
// 删除*p 删除*prev的后继结点;
if(prev==NULL)
Head =p->next;
else
prev->next=p->next;
delete p;
}
}
else
{
// 在*p之前插入*newp 在*prev之后插入*newp
newp->next=p;
if(prev==NULL)
Head =newp;
else
prev->next=newp;
}
}
~PolyList()
{//释放头节点;
while(Head!=NULL)
RemoveHead();
}
void RemoveHead()
{
Poly *p=Head;
Head=Head->next;
delete p;
}
void Add(PolyList &L)
{
for(Poly *p=L.Head; p!=NULL; p=p->next)
{
Poly *newp =new Poly;
newp->coef=p->coef; newp->index=p->index;
Insert(newp);
}
}
void Output()
{
for(Poly *p=Head; p!=NULL; p=p->next)
cout<<*p;
cout<<endl;
}
};
int main()
{
PolyList L1;
PolyList L2;
L1.Add(L2); L1.Output();
return 0;
}