C语言 一,链表一元多项式

一,链表一元多项式
题目如下:

自定义一元多项式中的“项”结构,自定义一元多项式的链表结构。
设计函数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;
}

上一篇:DotSpatial 要素删除节点


下一篇:P3723 [AH2017/HNOI2017]礼物 题解