链表实现多项式乘法

为了实现方便,这里默认多项式项数据是按照指数递增的顺序输入的,默认两多项式相乘后最大的指数小于1000

#include 
#include 
using namespace std;
struct Node{
	float cofe;
	int exp;
    Node *next;
    Node(float c,int e,Node *ne=NULL){
    	cofe=c;
    	exp=e;
    	next=ne;
	}
	Node *InsertAfter(float c,int e);
	friend ostream& operator<<(ostream&,const Node&);
};
Node *Node::InsertAfter(float c,int e){
	next=new Node(c,e);
	return next;
}
std::ostream& operator<<(ostream& out,Node& x){
	if(x.cofe==0)return out;
	out<>N;
	float inputc;
	int inpute;
	int maxorder1,maxorder2;
	for(int i=0;i>inputc>>inpute;
		if(i==N-1){
			maxorder1=inpute;
		}
		p=p->InsertAfter(inputc,inpute);
	} 
	cin>>M;//输入第二个多项式有多少项 
	for(int i=0;i>inputc>>inpute;
		if(i==M-1){
			maxorder2=inpute;
		}
		q=q->InsertAfter(inputc,inpute);
	}
	p=first.next;
	q=first2.next;
	Node result(0,-1);
	Node *r=&result;
	if(maxorder1!=-1||maxorder2!=-1){
		int maxorder=maxorder1+maxorder2;//计算出最大指数
		for(int i=0;i<=maxorder;i++){
			r=r->InsertAfter(0,i);
		}
		int temp[1000];
		for(int i=0;i<1000;i++){
			temp[i]=0;
		}
		while(p!=NULL){
			q=first2.next;
			while(q!=NULL){
				int tempc=p->cofe*q->cofe;
				int tempe=p->exp+q->exp;
				temp[tempe]+=tempc;
				q=q->next;
			}
			p=p->next;
		}
		r=result.next;
		for(int i=0;i<=maxorder;i++){
			r->cofe+=temp[i];
			r=r->next;
		}
	}
	r=result.next;
	while(r!=NULL){
		if(r->cofe!=0){
			std::cout<<*r;
		    if(r->next!=NULL){
			    if(r->next->cofe>0){
				cout<<"+";
			    }
		    }
		}
		r=r->next;
	}
	return 0;
}

你可能感兴趣的:(数据结构)