矩阵转置实验报告doc

  • 格式:docx
  • 大小:22.16 KB
  • 文档页数:32

下载文档原格式

  / 32
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矩阵转置实验报告

篇一:实验报告矩阵快速转置

实验报告

实验项目名称:实现矩阵的快速转置的操作所属课题名称:数据结构

实验类型:验证实验

实验日期: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 {