Polynomial addition Operation using C++[2.65]

Using a linked list to achieve a sum of one yuan polynomial, and later may continue to expand functions.

#include <iostream>
using namespace std;
struct PolyNode
{
	float coef;
	int exp;
	struct PolyNode* next;
};
class LinkList
{
	public:
		LinkList();
		LinkList(float a[],int b[],int n);
		~LinkList();
		int ListLength();
		void Get(int pos);
		int Locate(int item);
		void PrintLinkList();
		void Insert(int pos,int item);
		void Delete(int i);
		
		PolyNode* GetHead();
		
	private:
		PolyNode *head;
		PolyNode *rear;
		PolyNode *next;	
		PolyNode *p;
	    PolyNode *q;
	    PolyNode *s;
};
LinkList::LinkList()
{
	head = new PolyNode;
	head->next = NULL;
}
LinkList::~LinkList()
{
	p = head->next;
	while(p)
	{
		q = p;
		p = p->next;
		delete q;
	}
	head = NULL;
}
PolyNode* LinkList::GetHead()
{
	return head;
}
LinkList::LinkList(float a[],int b[],int n)
{
	head = new PolyNode;
	p = head;
	for(int i=0;i<n;++i)
	{
		s = new PolyNode;
		s->coef = a[i];
		s->exp = b[i];
		p->next = s;
		p = s;
	}
	p->next = NULL; 
}


void LinkList::PrintLinkList()
{
	p = head->next;
	while(p)
	{
		cout<<p->coef<<"x^"<<p->exp;
		if(p->next)
			if(p->next->coef>=0)
				cout<<"+";
		p = p->next;
	}
	cout<<endl;
}


void Add(LinkList &A,LinkList &B)
{
	PolyNode *s = new PolyNode;
	PolyNode *k = new PolyNode;
	PolyNode *j = new PolyNode;
	j->next = k;
	PolyNode *pa =new PolyNode;
	PolyNode *pb = new PolyNode;
	pa = A.GetHead()->next;
	pb = B.GetHead()->next;
	while(pa&&pb)
	{
		if(pa->exp<pb->exp)
		{
			s = new PolyNode;
			s->coef = pa->coef;
			s->exp =pa->exp;
			k->next = s;
			k = k->next;
			pa = pa->next; 
		}
		else if(pa->exp==pb->exp)
		{
			pa->coef = pa->coef+pb->coef;
			if(pa->coef==0)
			{}
			else
			{
				s = new PolyNode;
				s->coef = pa->coef;
				s->exp =pa->exp;
				k->next = s;
				k = k->next;
			}
	
			pa = pa->next;
			pb = pb->next;
		}
		else 
		{
			s = new PolyNode;
			s->coef = pb->coef;
			s->exp =pb->exp;
			k->next = s;
			k = k->next;
			pb = pb->next;
		}
	}
	while(pb)
	{
		k->next = pb;
		k = k->next;
		pb = pb->next;
	}
	while(pa)
	{
		k->next = pa;
		k = k->next;
		pa = pa->next;
	}
	//print
	PolyNode *p = new PolyNode;
	p = j->next->next;
	while(p)
	{
		cout<<p->coef<<"x^"<<p->exp;
		if(p->next)
			if(p->next->coef>=0)
				cout<<"+";
		p = p->next;
	}
	cout<<endl;
}
int main()
{
	int m,n;
	float s;
	int k;
	float *a,*c;
	int *b,*d;
	cout<<"The first polynomial term:";
	cin>>m;
	a = new float[m];
	b = new int [m];
	for(int i = 0;i<m;++i)
	{
		cout<<"The"<<i+1<<"coefficient:";
		cin>>s;
		a[i] = s;
		cout<<"The"<<i+1<<"index:";
		cin>>k;
		b[i] = k;
	}
	cout<<"The second polynomial term:";
	cin>>n;
	c = new float[n];
	d = new int [n];
	for(int i = 0;i<n;++i)
	{
		cout<<"The"<<i+1<<"coefficient:";
		cin>>s;
		c[i] = s;
		cout<<"The"<<i+1<<"index:";
		cin>>k;
		d[i] = k;
	}

	LinkList A(a,b,m),B(c,d,n);
	cout<<"---Print A---"<<endl;
	A.PrintLinkList();
	cout<<"---Print B---"<<endl;
	B.PrintLinkList();
	cout<<"---Print A+B---"<<endl;
	Add(A,B);
	cout<<"--------";
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值