用三元组表存储表示,求稀疏矩阵M转置函数T

更新时间:2023-09-28 22:24:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验目的

采用三元组表存储表示,求稀疏矩阵M转置函数T

实验内容

编程序并上机调试运行。

采用三元组表存储表示,求稀疏矩阵M转置函数T

编写程序

//采用三元组表存储表示,求稀疏矩阵M转置函数T

#include

#define MAXSIZE 100

typedef struct { int i,j; int e; }Triple;

typedef struct { Triple data[MAXSIZE+1]; int mu,nu,tu; }TSMatrix;

//创建稀疏矩阵M

CreateSMatrix(TSMatrix *M) { int i,m,n,e,k; printf(\输入矩阵M的行数、列数、非零元的个数(中间用逗号隔开):\ scanf(\ (*M).data[0].i=0; printf(\ for(i=1;i<=(*M).tu;i++) {

do { printf(\输入第%d个非零元素所在的行(1~%d)列(1~%d)值以及该数值:\

scanf(\ 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(\ return 1; }

//输出稀疏矩阵M

void PrintSMatrix(TSMatrix M) { int i; printf(\ for(i=1;i<=M.tu;i++) printf(\printf(\ printf(\}

//求稀疏矩阵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; } } return 1; }

//打印矩阵函数,以通常形式输出矩阵 void print(TSMatrix A) { int k=1,a,b; int M[MAXSIZE][MAXSIZE]; printf(\非零元素所对应的位置:\\n\

printf(\ for(a=0;a

printf(\ printf(\}

//主函数 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(\ getchar(); return 0; }

运行程序:

程序解析:

1.首先是将程序的开头写好,定义非零元个数最多为100.

定义非零元的行下标,列下标,和非零元素为int型。由mu,nu,tu分别代表矩阵的行数,列数和非零元个数。

2.创建稀疏矩阵M。

创建一个稀疏矩阵,用scanf进行用户输入行数,列数及非零元个数。当i小于等于非零元个数时,进行以下的for循环,执行内循环的循环语句。当k不为0时,重复执行输入非零元素的行列值以及其值,若超出行数或列数或非零元个数,则跳出循环。加入外循环,执行外循环的三个语句,直到,i等于非零个数,跳出外循环。

本文来源:https://www.bwwdw.com/article/1gjd.html

Top