稀疏矩阵的表示和转置

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

实验2 稀疏矩阵的表示与转置

实验人:杜国胜学号:Xb14680103

时间:11.9

1、实验目的

1.掌握稀疏矩阵的三元组顺序表存储结构

2.掌握稀疏矩阵的转置算法。

2、实验内容

采用三元组表存储表示,求稀疏矩阵M的转置矩阵T。(算法5.1)

3、实验步骤:

1.构建稀疏矩阵M。

2.求稀疏矩阵M的转置矩阵T。

3.输出稀疏矩阵M与稀疏矩阵T。

4、算法说明

首先要创建稀疏矩阵与三元组顺序表,定义mu,mu,tu分别表示矩阵的行列数与非零元个数。在进行稀疏矩阵的转置时要做到1.将矩阵的行列值相互交换2.将每个三元组的I,j相互调换3.重排三元组之间的次序

5、测试结果

6、分析讨论

在此次程序中转置的方法称为快速转置,在转置前,应先求的M的每一列中非零元的个数,进而求得每一列的第一个非零元的位置

7、附录:源代码

#include<stdio.h>

#define MAXSIZE 100

typedef struct

int i,j;

int e;

}Triple;

typedef struct

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

//创建稀疏矩阵M

void CreateSMatrix (TSMatrix *M)

int i,m,n,e,k;

printf("输入矩阵M的行数、列数、非零元的个数(中间用逗号隔开):");

scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);

(*M).data[0].i=0;

printf("\n");

for(i=1;i<=(*M).tu;i++)

do

printf("输入第%d个非零元素所在的行(1~%d)列(1~%d)值以及该数值:",i,(*M).mu,(*M).nu);

scanf("%d,%d,%d",&m,&n,&e);

k=0;

if(m<1||m>(*M).mu||n<1||n>(*M).nu)

k=1;

if(m<(*M).data[i-1].i||m==(*M).data[i-

1].i&&n<(*M).data[i-1].j)

k=1;

}while(k);

(*M).data[i].i=m;

(*M).data[i].j=n;

(*M).data[i].e=e;

printf("\n");

//输出稀疏矩阵M

void PrintSMatrix(TSMatrix M)

int i;

printf("**************************************\n");

for(i=1;i<=M.tu;i++)

printf("%2d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[ i].e);

printf("\n");

//求稀疏矩阵M的转置矩阵T

void TransposeSMatrix(TSMatrix M,TSMatrix *T) int p,q,col;

(*T).mu=M.nu;

(*T).nu=M.mu;

(*T).tu=M.tu;

if((*T).tu)

q=1;

for(col=1;col<=M.nu;++col)

for(p=1;p<=M.tu;++p)

if(M.data[p].j==col)

(*T).data[q].i=M.data[p].j;

(*T).data[q].j=M.data[p].i;

(*T).data[q].e=M.data[p].e;

++q;

void print(TSMatrix A)

int k=1,a,b;

int M[MAXSIZE][MAXSIZE];

printf("非零元素所对应的位置:\n");

for(a=0;a<A.mu;a++)

for(b=0;b<A.nu;b++)

M[a][b]=0;

while(k<=A.tu)

M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e;

k++;

for(a=0;a<A.mu;a++)

printf(" | ");

for(b=0;b<A.nu;b++)

printf("%d ",M[a][b]);

printf(" | \n");

printf("**************************************\n"); printf("\n");

//主函数

int main()

TSMatrix M,T;

printf("创建矩阵M:");

CreateSMatrix(&M);

printf("矩阵M的三元组表为:\n"); PrintSMatrix(M);

print(M);

TransposeSMatrix(M,&T);

printf("稀疏矩阵M的转换矩阵T的三元组表为:\n"); PrintSMatrix(T);

print(T);

printf("\n\n");

getchar();

return 0;

相关文档
最新文档