栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

稀疏矩阵(压缩存储、输出、转置)c语言版

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

稀疏矩阵(压缩存储、输出、转置)c语言版

目录

1.稀疏矩阵的三元组顺序表存储表示

2.主函数

3.输出函数

4.转置输出

5.总代码

6.输出样例


1.稀疏矩阵的三元组顺序表存储表示
#define MAXSIZE 500   //非零元素个数最大值 

typedef int Elemtype;
typedef struct
{
	int i,j;          //非零元素的行标、列标 
	Elemtype e;
}Triple; 
typedef struct
{
	int mu,nu,tu;     //矩阵的行数、列数、非零元素实际个数
	Triple date[MAXSIZE+1];
                      //0下标不储存,方便后续操作 
 }TSMatrix;

2.主函数
int main()
{
	TSMatrix M;
	
	printf("n请输入矩阵行数:n");
	scanf("%d",&M.mu);
	printf("请输入矩阵列数:n");
	scanf("%d",&M.nu);
	printf("请输入非零元素个数:n");
	scanf("%d",&M.tu);
	printf("请输入非零元素行标、列标及其值:n");
	printf("行标t列标t值n");
	for(int i = 1;i <= M.tu;i++)
	{
		scanf("%dt%dt%d",&M.date[i].i,&M.date[i].j,&M.date[i].e);
	 } 
	 
	output(M);         //输出稀疏矩阵 
	printf("n");
	TransposeM(M);     //转置输出稀疏矩阵
	
	return 0;
}

3.输出函数
void output(TSMatrix M)
{
    int i,j,t;
    for(i = 1;i <= M.mu;i++)
    {
    	for(j = 1;j <= 	M.nu;j++)
    	{
    		for(t = 1;t <= M.tu;t++)           //和每一个非零元素的行列对照 
    		{
    			if(i == M.date[t].i && j == M.date[t].j) 
    			{                              //如果相等
    				printf("%dt",M.date[t].e);//则输出相应坐标对应的值 
    				break;
				}
			}
			if(t == M.tu+1)    //如果t增加到非零元素总个数(M.tu)证明此坐标下不是非零元素 
			{
				printf("0t"); //则输出0 
			}
		}
		printf("n");
	}
}

4.转置输出
void TransposeM(TSMatrix M)//原理通同上输出函数 
{
	int i,j,t;
    for(i = 1;i <= M.nu;i++)
    {
    	for(j = 1;j <= 	M.mu;j++)//行数等于列数 
    	{
    		for(t = 1;t <= M.tu;t++)//列数等于行数 
    		{
    			if(i == M.date[t].j && j == M.date[t].i)//行列转换对照 
    			{
    				printf("%dt",M.date[t].e);
    				break;
				}
			}
			if(t == M.tu+1)
			{
				printf("0t");
			}
		}
		printf("n");
	}
}

5.总代码
#include

#define MAXSIZE 500//非零元素个数最大值 

typedef int Elemtype;
typedef struct
{
	int i,j;  //非零元素的行标、列标 
	Elemtype e;
}Triple; 
typedef struct
{
	int mu,nu,tu;//矩阵的行数、列数、非零元素实际个数
	Triple date[MAXSIZE+1];//0下标不储存,方便后续操作 
 }TSMatrix;
 
void output(TSMatrix M);
void TransposeM(TSMatrix M);

int main()
{
	TSMatrix M;
	
	printf("n请输入矩阵行数:n");
	scanf("%d",&M.mu);
	printf("请输入矩阵列数:n");
	scanf("%d",&M.nu);
	printf("请输入非零元素个数:n");
	scanf("%d",&M.tu);
	printf("请输入非零元素行标、列标及其值:n");
	printf("行标t列标t值n");
	for(int i = 1;i <= M.tu;i++)
	{
		scanf("%dt%dt%d",&M.date[i].i,&M.date[i].j,&M.date[i].e);
	 } 
	 
	output(M);//输出稀疏矩阵 
	printf("n");
	TransposeM(M);//转置输出稀疏矩阵
	
	return 0;
}

void output(TSMatrix M)
{
    int i,j,t;
    for(i = 1;i <= M.mu;i++)
    {
    	for(j = 1;j <= 	M.nu;j++)
    	{
    		for(t = 1;t <= M.tu;t++)//和每一个非零元素的行列对照 
    		{
    			if(i == M.date[t].i && j == M.date[t].j)//如果相等 
    			{
    				printf("%dt",M.date[t].e);//则输出相应坐标对应的值 
    				break;
				}
			}
			if(t == M.tu+1)//如果t增加到非零元素总个数(M.tu)证明此坐标下不是非零元素 
			{
				printf("0t");//则输出0 
			}
		}
		printf("n");
	}
}
void TransposeM(TSMatrix M)//原理通同上输出函数 
{
	int i,j,t;
    for(i = 1;i <= M.nu;i++)
    {
    	for(j = 1;j <= 	M.mu;j++)//行数等于列数 
    	{
    		for(t = 1;t <= M.tu;t++)//列数等于行数 
    		{
    			if(i == M.date[t].j && j == M.date[t].i)//行列转换对照 
    			{
    				printf("%dt",M.date[t].e);
    				break;
				}
			}
			if(t == M.tu+1)
			{
				printf("0t");
			}
		}
		printf("n");
	}
}

6.输出样例

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509935.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号