矩阵转置实验报告doc
- 格式:docx
- 大小:22.16 KB
- 文档页数:32
矩阵转置实验报告
篇一:实验报告矩阵快速转置
实验报告
实验项目名称:实现矩阵的快速转置的操作所属课题名称:数据结构
实验类型:验证实验
实验日期:XX/12/20
学院:数学与信息科学学院
专业: 信息与计算科学
班级: 082班
姓名:李晓璐
学号:0801214037
实验稀疏矩阵的快速转置操作
一、实验目的
1、了解稀疏矩阵的三元组存储形式。
2、熟悉掌握三元表存储矩阵的转置算法。
二、实验环境
硬件:PC 微型计算机、256M以上内存,40G以上硬盘。
软件:Windows XP,Turbo C/C++
三、实验内容
转置运算是一种最简单的矩阵运算。对于一个m*n的矩阵M,它的转置矩阵T是一个n*m的矩阵。假设a和b是TSMatrix型的变量,分别表示矩阵M和T。按照a.data中三元组的次序进行转置,并将转置后的三元组置入b中恰当的位置。实现由a得到b的方式如下。
在转置前,应先求得M的每一列中非零元的个数,进而求得每一列的第一个非零元在b.data中应有的位置。在此,设num和cpot两个向量,num[col]表示矩阵M中第col列中非零元的个数,cpot[col]指示M中第col列的第一个非零元在b.data中应有的位置。显然有:
cpot[1]=1;
cpot[col]=cpot[col-1]+num[col-1]
四、实验步骤
1、本实验的程序清单如下。
“TSMatrix.h”
#define MAXSIZE 12500
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW 0
typedef int Status;
typedef int ElemType;
struct Triple
{
int i,j;
ElemType e;
};
class TSMatrix
{
public:
TSMatrix(){mu=0;nu=0;tu=0;}; TSMatrix(int,int,int);
~TSMatrix(){};
void setTSMatrix();
Status PrintSMatrix();
Status TransposeSMatrix(TSMatrix &T);
Status FastTransposeSMatrix(TSMatrix &T);
private:
Triple data[MAXSIZE+1]; int mu,nu,tu;
};
TSMatrix::TSMatrix(int a,int b,int c)
{
mu=a;nu=b;tu=c;
for(int p=1;p {
printf("依次输入稀疏矩阵第%d个非零元的行号,列号,元
素:",p);scanf("%d,%d,%d",&data[p].i,&data[p].j,&dat a[p].e);
}
}
void TSMatrix::setTSMatrix()
{
cout cin>>mu;
cout cin>>nu;
cout cin>>tu;
for(int p=1;p {
printf("依次输入稀疏矩阵第%d个非零元的行号,列号,元
素:",p);scanf("%d,%d,%d",&data[p].i,&data[p].j,&dat a[p].e);
}
}
Status TSMatrix::PrintSMatrix()
{
int k=1,t=0;
for(int p=1;p {
for(int q=1;q {
if(p==data[k].i&&q==data[k].j&&k { cout.width(3);
cout.setf(ios::left);
cout cout.unsetf(ios::left);
k++;
}
else
{
cout.width(3);
cout.setf(ios::left);
cout cout.unsetf(ios::left);
}
}
cout }
return OK;
}
Status TSMatrix::TransposeSMatrix(TSMatrix &T)
{
int col,p,q;
T.mu=nu;
T.nu=mu;
T.tu=tu;
if(T.tu)
{
q=1;
for(col=1;col for(p=1;p if(data[p].j==col)
{
T.data[q].i=data[p].j;
T.data[q].j=data[p].i;
T.data[q].e=data[p].e;
++q;
}
}
return OK;
}
Status TSMatrix::FastTransposeSMatrix(TSMatrix &T)
{
int col,p,q,t;
int *num=new int[10],*cpot=new int[10];
num=(int*)malloc(tu*sizeof(int));
cpot=(int*)malloc(tu*sizeof(int));
T.mu=nu;
T.nu=mu;
T.tu=tu;
if(T.tu)
{
for(col=1;col for(t=1;t cpot[1]=1;
for(col=2;col {