稀疏矩阵转置算法(C语言)

这篇具有很好参考价值的文章主要介绍了稀疏矩阵转置算法(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(参考数据结构教材,严蔚敏,吴伟民版 p99,多谢阅读,望对您有帮助)
无论是几维的数组,在计算机中都是以一维数组的方式进行存储的。
矩阵:相当于二维数组,它的存储,依然是用一维数组的方式进行存储。
nxn的矩阵,在计算机空间上,需要nxn个空间
稀疏矩阵的压缩:将矩阵中的值为零或者为常数C的某c个数,不做存储(或者共用同样的空间,本题转置对0不做存储),压缩后原本nxn的矩阵,存储只需要nxn-c的空间
下面以这样的M矩阵进行转置
1 2 3
4 0 0
0 5 1
转置后得N矩阵
1 4 0
2 0 5
3 0 1
M矩阵的计算机三元组存储方式(此图为图1)
稀疏矩阵转置算法(C语言)
转置后T矩阵的计算机三元组存储方式(此图为图2)
稀疏矩阵转置算法(C语言)
转置过程的实现,实际上是从图一转化为图二的过程
因为图1是按照行储存(第一行储存完了,才储存第二行),转置后的T矩阵,同样是按照行进行存储。
故T矩阵再遍历矩阵M时,M的列就是T的行把M的每列的数据,逐列,一一存到data中,完成转置运算

先给出转置代码实现:

#include "stdio.h"
#include "stdlib.h"

#define Max_size 1000

typedef struct 
{
	int i;//矩阵中数据的行号
	int j;//矩阵中数据的列号
	int e;//i行j列,数据的值
}Triple;//三元组为一个节点

typedef struct
{
	Triple data[Max_size + 1];//data[0]未用
	int mu, nu, tu;//矩阵的行数,列数,非零元个数
}Matrix;

void TransposeSMatrix(Matrix M,Matrix &T)//将矩阵M转置为T
{
	T.mu = M.nu; T.nu = M.mu; T.tu = M.tu;
	if (T.tu)//非零元不为0
	{
		int q = 1;//用于逐项记录转置后矩阵T的值
		int col, p;//矩阵M的col列号,p:指向当前值在M矩阵硬件的储存位置
		for (col = 1; col < M.nu; col++)
		{
			for (p = 1; p < M.tu; p++)
			{
				if (M.data[p].j == col)//逐列进行遍历,并插入到T.data中
				{
					T.data[q].i = M.data[p].j;
					T.data[q].j = M.data[p].i;//转置后i,j互换
					T.data[q].e = M.data[p].e;//T的值获取到
					q++;//T指针的数据后移
				}
			}
		}
	}
}

int main()
{
	Matrix M,T;
	M.mu = 3;
	M.nu = 3;
	M.tu = 6;
	M.data[1].i = 1;
	M.data[1].j = 1;
	M.data[1].e = 1;

	M.data[2].i = 1;
	M.data[2].j = 2;
	M.data[2].e = 2;

	M.data[3].i = 1;
	M.data[3].j = 3;
	M.data[3].e = 3;

	M.data[4].i = 2;
	M.data[4].j = 1;
	M.data[4].e = 4;

	M.data[5].i = 3;
	M.data[5].j = 2;
	M.data[5].e = 5;

	M.data[6].i = 3;
	M.data[6].j = 3;
	M.data[6].e = 1;

	TransposeSMatrix(M, T);
	printf("(%d,%d):%d", T.data[4].i, T.data[4].j, T.data[4].e);//求转置后T矩阵2行3列的值
	return 0;
}

运行结果
转置后T矩阵2行3列的值为5,如运行结果所示
稀疏矩阵转置算法(C语言)文章来源地址https://www.toymoban.com/news/detail-429583.html

到了这里,关于稀疏矩阵转置算法(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 稀疏矩阵的运算-加、减、乘、转置(C-数据结构)

    以三元组的形式给出输入数据,选择对应的运算后给出对应输出结果(稀疏矩阵的运算器) 页面布局就不说了,这里大概说一下各个运算模块的实现 加减法 将三元组中对应的元素行列位置进行比较,将较为靠前的元素直接放进新的三元组存储结构,位置相同的元素通过对应符

    2024年02月11日
    浏览(12)
  • 西工大NOJ数据结构实验——2.1稀疏矩阵转置

    对稀疏矩阵进行转置操作,按照老师讲的,有两种办法。我用的是第一种最简单的,从上到下一行一行得走,虽然速度很慢,但是简单。 说实话这个题目很讨厌,我们定义的三元组里面mu表示的是行数,但是题目要求输入的m表示的是列数,这就很容易搞混了。 但是我们不用

    2023年04月25日
    浏览(52)
  • 数据结构·练习·三元组表法实现稀疏矩阵的转置

    一、问题描述 一个mxn的矩阵A,它的转置矩阵B是一个nxm矩阵,且A[i][j]=B[j][i],0=i=m-1,0=j=n-1,即A的行是B的列,A的列是B的行。 用三元组表对稀疏矩阵进行压缩存储,再进行时间复杂度O(n)的快速转置,最后输出稀疏矩阵。 其中m=4,n=5 二、算法概述 1、问题分析 1)压缩 2)转置

    2024年02月04日
    浏览(18)
  • C++数据结构稀疏矩阵运算(含加减乘及快速转置)

    题目: 内容:稀疏矩阵运算器 要求:使用三元组顺序表存储矩阵;实现矩阵的逆置、加、减、乘运算;具有相应的报错处理。 本人采用C++来书写该数据结构的题目,有兴趣的同学可以了解一下需要掌握一定的封装的能力。 类的结果存储如下所示: 加减法的函数内容如下所

    2023年04月10日
    浏览(11)
  • 【数据结构】数组和字符串(十):稀疏矩阵的链接存储:十字链表的矩阵操作(加法、乘法、转置)

    【数据结构】数组和字符串(一):矩阵的数组表示   矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造

    2024年02月08日
    浏览(20)
  • 数据结构第七周 :(稀疏矩阵快速转置 + 简单文本编辑器 + 三元组的矩阵加法 + 九宫格数独游戏 + 数组主元素 + 螺旋数字矩阵 + 蛇形矩阵)

    【问题描述】 稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。而矩阵转置就

    2023年04月21日
    浏览(12)
  • C语言数据结构课设:矩阵的运算(转置.求和.求差.矩阵相乘.求逆.数乘),文件读取矩阵

      #include stdio.h #include string.h #includestdlib.h #includemath.h // 定义一个结构体类型,表示一个矩阵 typedef struct matrix {     int nrow; // 矩阵的行数     int ncol; // 矩阵的列数     double data[10][10]; // 矩阵的数据,最大为 10 x 10 } matrix; // 定义一个函数,用于显示一个矩阵的内容  void dis

    2024年03月27日
    浏览(15)
  • 【数据结构】稀疏矩阵的压缩存储(三元组表、十字链表)(C语言)

    稀疏矩阵 是指矩阵中大多数元素为零的矩阵。从直观上讲,当非零元素个数低于总元素的30%时,这样的矩阵为稀疏矩阵。 1.1 三元组表的存储结构 稀疏矩阵的三元组表表示法是指只存储非零元素,同时存储该非零元素在矩阵中所处的行号和列号的位置信息。 为方便处理,将

    2023年04月16日
    浏览(9)
  • 【数据结构与算法】 完成用十字链表存储的稀疏矩阵的加法运算

       Qestion:   完成用十字链表存储的稀疏矩阵的加法运算。 获取两个稀疏矩阵总有多少个非零元素,记作 cnt 。 当 cnt 不为零时一直循环,每循环一次 i++ ,也就是行循环,每循环一次就转移至下一行。 先从第一行开始循环,使得两个工作指针 p 、 q 分别指向两个稀疏矩阵

    2024年02月13日
    浏览(15)
  • 稀疏矩阵(表示、转置)

    目录 一、稀疏矩阵的三元组表示法 1.1 稀疏矩阵非零元素的三元组存储表示 1.2 稀疏矩阵三元组表的类型定义 二、用三元组实现稀疏矩阵的转置运算  2.1 方法一:列序递增转置法  2.1.1 算法思想 2.1.2 算法实现 2.2 方法二:一次定位快速转置法  2.2.1 算法思想 2.2.2 算法实现 

    2024年02月06日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包