系数矩阵运算数据结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(int j=1;j<=mat->MX();j++){
float d=mat->ELEM(i,j);
add_elem(i,j,d);
}
}
};
void sub(coeffmatrix * mat){ //减矩阵
int Nx=this->N>mat->NX()?this->N:mat->NX();
if(Row[i]!=NULL){
delete Row[i];
Row[i]=NULL;
}
}
delete * Row;
Row=NULL;
}
}
}
bool reset(int n,int m){ //扩展行列数,原内容不破坏,
if(n==N && m==M)return true;
if(n<N || m<M)return false;
float s=0;
for(int k=1;k<=Mp;k++){
s+=m1->ELEM(i,k)*m2->ELEM(k,j);
}
result->set_elem(i,j,s);
}
}
return true;
}
void show(){ //矩阵显示
cout<<"Matrix "<<N<<" x "<<M<<endl;
if(p->getcol()==m){a=p->getdata();break; }
p=p->next;
}
}
}
rLeabharlann Baiduturn a;
};
void fset(int n,int m){ //强行重置矩阵行列,并所有行为空,即矩阵为全零阵
if(N!=0){
if(Row!=NULL){
for(int i=0;i<N;i++){
return d;
}
}else{
p->next=new elem (c,d);
return d;
}
p=p->next;
}while(p);
};
float add_elem(int r,int c,float d){ //元素+数值
if(r>N || c>M)return 0;
if(d<EPS)return 0;
elem * p;
p=Row[r-1];
if(p==NULL){
Row[r-1]=new elem(c,d);
return d;
}
while(p){
if(p->getcol()==c){
p->setdata(p->getdata()+d);
return p->getdata();
}
if(p->next != NULL){
int Mx=this->M>mat->MX()?this->M:mat->MX();
reset(Nx,Mx);
for(int i=1;i<=mat->NX();i++){
for(int j=1;j<=mat->MX();j++){
float d=mat->ELEM(i,j);
add_elem(i,j,-d);
if(Row[i]!=NULL){
delete Row[i];
Row[i]=NULL;
}
}
delete * Row;
}
}
Row=new elem * [n];
for(int i=0;i<n;i++)Row[i]=NULL;
N=n;M=m;
}
bool friend mul(coeffmatrix * result,coeffmatrix *m1,coeffmatrix *m2) //友元函数矩阵乘法
Row[r-1]=new elem(c,d);
return d;
}
do{
if(p->getcol()==c){
p->setdata(d);
return d;
}
if(p->next != NULL){
if(p->next->getcol()>c){
p->next=new elem(c,d,p->next);
elem(){col=0;data=0;next=NULL;};
~elem(){cout<<"del "<<col<<" "<<data<<" ";delete next;next=NULL;};
float getdata(){return data;};
int getcol(){return col;}
for(int i=1;i<=NN;i++){
for(int j=i;j<=NN;j++){
m1.set_elem(i,j,i*j);
}
m2.set_elem(i,NN-i+1,1);
}
coeffmatrix m3;
m1.show();
m2.show();
mul(&m3,&m2,&m1);
m3.show();
int setcol(int c){return(col=c);};
float setdata(float d){return(data=d);};
};
class coeffmatrix{ //稀疏矩阵类
int N; //行数
int M; //列数
elem ** Row; //行链接点列表全零行指针为NULL
public:
coeffmatrix(int n,int m){
N=n;
M=m;
Row=new elem * [n];
for(int i=0;i<N;i++){
Row[i]=NULL;
}
};
coeffmatrix(){ //无参构造函数建立空矩阵
N=0;M=0;Row=NULL;
};
coeffmatrix(coeffmatrix & m){ //拷贝构造函数
};
float set_elem(int r,int c,float d){ //元素赋值
if ((r>N || c>M)||(r<1||c<1))return 0;
if(Row==NULL)return 0;
if(d<EPS)return 0;
elem * p;
p=Row[r-1];
if(p==NULL){
N=m.N;M=m.M;Row=new elem * [N];
for(int i=0;i<N;i++){
if(m.Row[i]!=NULL){
Row[i]=NULL;
}else{
elem * p=m.Row[i];
elem * q=new elem(p->getcol(),p->getdata());
}
}
};
int NX(){return N;};
int MX(){return M;};
float ELEM(int n,int m){ //取矩阵元素值A[n,m]
float a=0;
if(n<=N && n>=1){
if(m<=M && m>=1){
elem * p=Row[n-1];
while(p){
{
if(m1->MX()!=m2->NX())return false;
int Mp=m1->MX();
int Nx=m1->NX();
int Mx=m2->MX();
result->fset(Nx,Mx);
for(int i=1;i<=Nx;i++){
for(int j=1;j<=Mx;j++){
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
cout<<ELEM(i,j)<<"\t";
}
cout<<endl;
}
}
};
int main()
{
int NN=5;
coeffmatrix m1(NN,NN);
coeffmatrix m2(NN,NN);
cout<<"setup the matrix"<<endl;
cout<<endl;
elem ** p=Row;
elem ** Rx=new elem * [n];
for(int i=0;i<n;i++){
if(i<N){
Rx[i]=Row[i];
}else{
Rx[i]=NULL;
}
}
delete * p ;
Row=Rx;
N=n;M=m;
return true;
m3.add(&m1);
m3.show();
}
//如果需要必须行列数相同才能加,则将
//以下三行改为,行列数验证
int Nx=this->N>mat->NX()?this->N:mat->NX();
int Mx=this->M>mat->MX()?this->M:mat->MX();
reset(Nx,Mx);
//----
for(int i=1;i<=mat->NX();i++){
if(p->next->getcol()>c){
p->next=new elem(c,d,p->next);
return d;
}else{
p=p->next;
}
}else{
p->next=new elem (c,d);
return d;
}
};
};
void add(coeffmatrix * mat){ //加矩阵;可以行列数不同,
#include <iostream.h>
#define EPS 1.0E-8 //很小的数认为是零元素
class elem{ //定义矩阵元素类
int col;
float data;
public:
elem * next; //行链接
elem(int c,float d,elem * nx=NULL){col=c;data=d;next=nx;};
elem * s=q;
Row[i]=q;
p=p->next;
while(p){
q=new elem(p->getcol(),p->getdata());
s->next=q;
s=q;
p=p->next;
}
}
}
};
~coeffmatrix(){
if(N!=0){
if(Row!=NULL){
for(int i=0;i<N;i++){
相关文档
最新文档