⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 polynomial.h

📁 基于c++的数据结构源代码。是学习数据结构的很好的demo
💻 H
字号:
#define defaultsize 255
#include<iostream>
#include<stdio.h>
using namespace std;

class Polynomial{
private:
	float *coef;                      //系数
	int *expn;                         //指数
	int num;                           //多项式中非零项个数
public:
	Polynomial(){                          
		coef=new float[defaultsize];
		expn=new int[defaultsize];
		for(int j=0;j<defaultsize;j++){ coef[j]=0;expn[j]=0;}
		num=0;
	}
	~Polynomial(){delete[]coef;}
	void Create();                               
	int Find(int e);                             
	void SetCoef(float c,int i){coef[i]=c;}       
	float GetCoef(int c){return coef[c];}        
	void SetExpn(int c,int i){expn[i]=c;}
	int GetExpn(int e){return expn[e];}
	void sum(Polynomial &pa,Polynomial &pb);    
	void differential();                      
	void Print();                           
	int cmp(int a,int b);                   
};

void Polynomial::Create(){ //初试化数据
	int e;float m;int i=1;
	cout<<"\n请依次输入多项式的系数和指数:(例如:3 4 2 2 4 5 表示 3x^4+2x^2+4x^5)"<<endl;
	do{
		cin>>m>>e;
		if(e>=0){
			if(Find(e)!=0) SetCoef(m+GetCoef(Find(e)),Find(e));
			else{
				SetCoef(m,i);SetExpn(e,i);i++;
				if(m!=0) SetExpn(++num,0);
			}
		}
		else cout<<"数据有误!请重新输入!"<<endl;
	}while(cin.get()!='\n');
	for(int pass=1;pass<GetExpn(0);pass++){           
		for(int j=1;j<=GetExpn(0)-pass;j++)
			if(expn[j]>expn[j+1]){
				int temp1=expn[j];expn[j]=expn[j+1];expn[j+1]=temp1;
				float temp2=coef[j];coef[j]=coef[j+1];coef[j+1]=temp2;
			}
	}
}

int Polynomial::Find(int e){
	for(int j=1;j<=GetExpn(0);j++){
		if(GetExpn(j)==e) return j;
	}
	return 0;
}

void Polynomial::sum(Polynomial &pa,Polynomial &pb){ //加减法
	int i=1,j=1,k=1;
	while(i<=pa.GetExpn(0) && j<=pb.GetExpn(0)){
		switch(cmp(pa.GetExpn(i),pb.GetExpn(j))){
		case -1:
			SetExpn(pa.GetExpn(i),k);
			SetCoef(pa.GetCoef(i),k);
			k++;i++;SetExpn(++num,0);break;
		case 0:
			if((pa.GetCoef(i)+pb.GetCoef(j))!=0){
				SetExpn(pa.GetExpn(i),k);
			    SetCoef(pa.GetCoef(i)+pb.GetCoef(j),k);
				k++;SetExpn(++num,0);
			}
			i++;j++;break;
		case 1:
			SetExpn(pb.GetExpn(j),k);
			SetCoef(pb.GetCoef(j),k);
			k++;j++;SetExpn(++num,0);break;
		}
	}
	if(i>pa.GetExpn(0)) for(j;j<=pb.GetExpn(0);j++){SetExpn(pb.GetExpn(j),k);SetCoef(pb.GetCoef(j),k);k++;SetExpn(++num,0);}
	else for(i;i<=pa.GetExpn(0);i++){SetExpn(pa.GetExpn(i),k);	SetCoef(pa.GetCoef(i),k);k++;SetExpn(++num,0);}
}

int Polynomial::cmp(int a,int b){ 
	if(a>b) return 1;
	if(a==b) return 0;
	if(a<b) return -1;
}

void Polynomial::differential(){ //求导
	int i;
	if(GetExpn(0)==0) SetExpn(0,0);
	else if(GetExpn(1)==0){
		for(i=2;i<=GetExpn(0);i++){
			SetCoef(GetExpn(i)*GetCoef(i),i-1);
			SetExpn(GetExpn(i)-1,i-1);
		}
		SetExpn(GetExpn(0)-1,0);
	}
	else for(i=1;i<=GetExpn(0);i++){
		SetCoef(GetExpn(i)*GetCoef(i),i);
		SetExpn(GetExpn(i)-1,i);
	}
}

void Polynomial::Print(){ //打印
	cout<<"为"<<GetExpn(0)<<"次多项式:";
	for(int j=GetExpn(0);j>0;j--){
			cout<<" "<<coef[j]<<"x^"<<expn[j];
	}
	cout<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -