赞
踩
#include <iostream>
using namespace std;
struct TupNode{
int row;//行号
int col;//列号
int d;//元素值
};
const int MAXR=20;//最大行数
const int MAXC=20;//最大列数
const int MaxSize=100;//三元组顺序表的最大元素个数
class SMatrix {
public:
SMatrix();//构造函数
~SMatrix();//析构函数
void CreateTSMatrix(const int A[][MAXC], int m, int n);//创建三元组
bool Setvalue(int i, int j, int x);//三元组元素赋值
bool Getvalue(int i, int j, int&x);//将指定位置的元素赋给变量
void DispMat();//输出
void Transpose(SMatrix&tb);//矩阵转置
private:
int rows, cols, nums;//分别表示行数,列数和非零元素个数
TupNode*data;//稀疏矩阵对应的三元组顺序表
};
//构造函数
SMatrix::SMatrix()
{
data=new TupNode[MaxSize];
}
//析构函数
SMatrix::~SMatrix()
{
delete[]data;
//输出
void SMatrix::DispMat()
{
int i;
if(nums<=0)
return;
cout<<"\t"<<rows<<"\t"<<cols <<"\t"<<nums <<endl;
cout<<"\t \n";
for(i=0;i<nums;i++)
cout<<"\t"<< data[i]. row<<"\t"<< data[i]. col<<"\t"<< data[i]. d<< endl;
}
void SMatrix::CreateTSMatrix(const int A[][MAXC], int m, int n)
{
int i,j;
rows=m, cols=n, nums=0;
for(i=0;i<m;i++)
for(j=0;i<n;i++)
if(A[i][j]!=0)//只存储非零元素
{
data[nums]. row=i;
data[nums]. col=j;
data[nums]. d=A[i][j];
nums++;
}
}
bool SMatrix::Setvalue(int i, int j, int x)
{
int k =0,k1;
if( i<0||i>=rows||j<0||j>=cols)
{return false;}
while(k<nums &&i>data[k]. row)//查找第i行的第1个非零元素k++;
if(data[k]. row==i&&data[k]. col==j)//找到这样的元素data[k]. d= x;
{
data[k].d=x;
}
else {//当不存在这样的元素时插入一个元素
for (k1=nums-1;k1>=k;k1--)
{//后移元素以便插入
data[k1+1]. row=data[k1]. row;
data[k1+1]. col=data[k1]. col;
data[k1+ 1]. d= data[k]. d;
}
data[k]. row=i;
data[k]. col=j;
data[k]. d =x;
nums++;
}
return true;
}
//将指定位置的元素赋给变量
bool SMatrix::Getvalue(int i, int j, int&x)
{
int k = 0;
if(i<0||i>=rows||j<0||j>=cols)
{return false;}
while (k<nums &&data[k]. row<i)
{
k++;
}
if(data[k]. row==i&&data[k].col==j)
{
x=data[k].d;
}
else
x =0;
return true;
}
void SMatrıx::Transpose(SMatrıx&tb)
{
int p,q =0,v;
tb. rows=cols;
tb. cols=rows;
tb. nums =nums;
if(nums!=0)
{
for(v=0;v<cols;v++)
for(p=0;p<nums;p++)
if(data[p]. col==v)
{
tb. data[q]. row=data[p]. co;
tb. data[q]. col=data[p]. row;
tb. data[q]. d= data[p]. d;
q++;
}
}
}
int main()
{
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。