用多项试实现数组的加法和剩法

好吧,程序很烂,但我一点点在努力,呵呵~~加油~~

//单键表

#include<iostream>

using namespace std;

typedef struct Node* PtrToNode;
typedef PtrToNode Polynomail;

//多项式ADT键表实现在的类型声明
struct Node
{
	int Cofficient;
	int Exponent;
	PtrToNode next;
	
};

//生成一个空的多项式,用系数和阶-1来表示头结点
void Zero(Polynomail P)
{
	P->Cofficient=-1;
	P->Exponent=-1;
	P->next=NULL;
}

//两个多项式相加
void AddPolynomial(const Polynomail Poly1,const Polynomail Poly2,Polynomail Poly3)
{
	PtrToNode p1,p2,p3;
	p1=Poly1->next;
	p2=Poly2->next ;
	p3=Poly3;
	while (p1!=NULL&&p2!=NULL)
	{
		if(p1->Exponent>p2->Exponent)
		{
			PtrToNode temp=(PtrToNode)malloc(sizeof(struct Node));
			temp->Cofficient=p1->Cofficient;
			temp->Exponent=p1->Exponent;
			temp->next=NULL;
			p3->next=temp;
			p1=p1->next;
			p3=p3->next;
		}
		else if(p1->Exponent<p2->Exponent)
		{
			PtrToNode temp=(PtrToNode)malloc(sizeof(struct Node));
			temp->Cofficient=p2->Cofficient;
			temp->Exponent=p2->Exponent;
			temp->next=NULL;
			p3->next=temp;
			p2=p2->next;
			p3=p3->next;
		}
		else if(p1->Exponent==p2->Exponent)
		{
			PtrToNode temp=(PtrToNode)malloc(sizeof(struct Node));
			temp->Cofficient=p1->Cofficient+p2->Cofficient;
			temp->Exponent=p1->Exponent;
			temp->next=NULL;
			p3->next=temp;
			p1=p1->next;
			p2=p2->next;
			p3=p3->next;
		}
	}
	if(p1==NULL&&p2!=NULL)
	{
		PtrToNode temp;
		while(p2!=NULL)
		{
			temp=(PtrToNode)malloc(sizeof(struct Node));
			temp->Cofficient=p2->Cofficient;
			temp->Exponent=p2->Exponent;
			temp->next=NULL;
			p3->next=temp;
			p2=p2->next;
			p3=p3->next;
		}
	}
	else if(p1!=NULL&&p2==NULL)
	{
		PtrToNode temp;
		while(p1!=NULL)
		{
			temp=(PtrToNode)malloc(sizeof(struct Node));
			temp->Cofficient=p1->Cofficient;
			temp->Exponent=p1->Exponent;
			temp->next=NULL;
			p3->next=temp;
			p1=p1->next;
			p3=p3->next;
		}
	}
}

void MulPolynomial(const Polynomail Poly1,const Polynomail Poly2,Polynomail Poly3)
{
	PtrToNode p1,p2,p3;
	
	
	p3=Poly3;

	PtrToNode temp;
	 
	for(p1=Poly1->next;p1!=NULL;p1=p1->next)
	{
		for(p2=Poly2->next;p2!=NULL;p2=p2->next)
		{
			temp=(PtrToNode)malloc(sizeof(struct Node));
			temp->Cofficient=(p1->Cofficient)*(p2->Cofficient);
			temp->Exponent=p1->Exponent+p2->Exponent;
			temp->next=NULL;
			PtrToNode bPoly3=Poly3->next;
			while(bPoly3!=NULL)//合并同类项
			{
				if(bPoly3->Exponent==temp->Exponent)
				{
					bPoly3->Cofficient=bPoly3->Cofficient+temp->Cofficient;
					break;
				}
				bPoly3=bPoly3->next;
			}
			p3->next=temp;
			p3=p3->next;
		}
	}

//把得到的多项式进行排序
	for(PtrToNode pai=Poly3->next;pai!=NULL;pai=pai->next)
	{
		p3=Poly3->next;
		while(p3->next!=NULL)
		{
			if(p3->next->Exponent>p3->Exponent)
			{
 				int k;
				k=p3->next->Cofficient;
				p3->next->Cofficient=p3->Cofficient;
				p3->Cofficient=k;
				k=p3->next->Exponent;
				p3->next->Exponent=p3->Exponent;
				p3->Exponent=k;
			}
			else
			{
				p3=p3->next;
			}
		}
	}
}


继续努力,哈哈~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值