用三元组表实现稀疏矩阵的基本操作

这篇具有很好参考价值的文章主要介绍了用三元组表实现稀疏矩阵的基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

问题描述

数据结构

算法设计

算法流程图

 源代码

 运行结果     

​ 


 

问题描述

编写程序用三元组表实现稀疏矩阵的按列转置操作。

数据结构

本设计使用三元组表实现。

算法设计

程序中设计了三个函数:

1.函数InitSPNode()用来建立一个稀疏矩阵的三元组表。

    首先输入行数、列数和非零元的值,输入(-1 ,-1,-1)结束输入。

2.函数showMatrix()用来输出稀疏矩阵。

   算法中按矩阵a的列进行循环处理,对a的每一列扫描三元组,找出相应的元素,若找到,则交换其行号和列好,并存储到矩阵b的三元组中。

3.函数TransposeSMatrix()用来完成稀疏矩阵的转置算法。

   算法的主要工作是在p和col的两重循环中完成,时间复杂度为O(n*t)。如果

非零元素个数t和m*n同数量级,则算法的时间复杂度变为O(m*n^2)。

算法流程图

用三元组表实现稀疏矩阵的基本操作文章来源地址https://www.toymoban.com/news/detail-435919.html

 源代码

/********
date:2021-10-28
author:sy
version:1.0
Description:用三元组表实现稀疏矩阵的按列转置操作 
*********/
#include<stdio.h>
#include<string.h>
#define OK 1
#define Maxsize 10   //用户自定义三元组最大长度

/*定义三元组表*/
typedef struct  
{
	 int i,j;  //非零元素的行列 
	 int v;    //非零元素值 
 }SPNode;
/*定义三元组表*/
typedef struct  
{
 	SPNode data[Maxsize];  //三元组表 
 	int m,n,t;             //矩阵行,列及三元组表长度 
}SPMatrix;                 //三元组表的存储类型 

/*输入三元组表*/
void InitSPNode(SPMatrix*a)  
{
    int i,j,k,val,maxrow,maxcol;
	     maxrow=0;
	     maxcol=0;
	     i=j=0;
	     k=0;
    while(i!=-1&&j!=-1)  //row=-1&&col=-1结束输入
	{
	  	printf("输入(行列值):");
	  	scanf("%d%d%d",&i,&j,&val);
	  	a->data[k].i=i;
	  	a->data[k].j=j;
	  	a->data[k].v=val;
	  	if(maxrow<i)maxrow=i;
	  	if(maxcol<j)maxcol=j;
	  	k++;
    } 
	 a->m=maxrow;a->n=maxcol;a->t=k-1;
} 

/*输出稀疏矩阵*/
void showMatrix(SPMatrix*a)  
{
    int p,q;
   	int t=0;
   	for(p=0;p<=a->m;p++)
   	{
   		for(q=0;q<=a->n;q++)
   		{
   			if(a->data[t].i==p&&a->data[t].j==q)
   			{
   				printf(" %d  ",a->data[t].v);
   				t++;
			}
	    else printf(" 0  "); 
		}
		     printf("\n"  );
	} 
} 

/*稀疏矩阵转置*/
void TransposeSMatrix(SPMatrix*a,SPMatrix*b)  
{
	int q,col,p;
	b->m=a->n;b->n=a->m;b->t=a->t;
	if(b->t)
	{
		q=0;
		for(col=0;col<=a->n;++col)   /*按a的列序转置*/
		     for(p=0;p<a->t;++p)     /*扫描整个三元组表*/
		     if(a->data[p].j==col)
			 {
			    b->data[q].i=a->data[p].j;
			    b->data[q].j=a->data[p].i;
				b->data[q].v=a->data[p].v;
				++q;
			 } 
	}
}
int main()
{
	SPMatrix a,b;
 	printf("\n 结束请输入(-1-1-1)\n"  );
 	InitSPNode(&a);
 	printf(" 输入矩阵为:\n"  );
 	showMatrix(&a);     //转置前
  	TransposeSMatrix(&a,&b);
 	printf(" 输出矩阵为: \n"  );
 	showMatrix(&b);     //转置后 
}

  运行结果     

 

到了这里,关于用三元组表实现稀疏矩阵的基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 三元组操作(相加)——稀疏矩阵(c语言)

     运行环境:TDM-GCC 三元组用来存储 稀疏矩阵 比较节省空间,因为稀疏矩阵大部分都是零元素,而三元组只记录非零元素。 这里两个相加的矩阵有着同样的 i行 j列。 运行结果:         行数:3 列数:4  元素个数:4         --------------------         第0 行  第1 列  1    

    2024年02月05日
    浏览(49)
  • 稀疏矩阵(三元组)的创建,转置,遍历,加法,减法,乘法。C实现

    1.创建。 可以直接赋值字符串,但是为0的元素也要依次赋值,比较麻烦,但是容易理解也能实现。 其次也可以构思三元组赋值,只赋值非零元素和它的行,列数,在打印时进行if判断,没有赋值的就输出0,这样比较简单。 创建结构体时,一个矩阵需要有它的行总数和列总数

    2024年02月02日
    浏览(57)
  • 【数据结构】稀疏矩阵存储的三种方法及三元组表示稀疏矩阵转置算法的两种实现 —— C++

    1. 三元组顺序表数据结构 注意:data[]中的元素是按行存储或者按列存储的,所以 在将三元组逆置时,不能简单地将行列下标对换,data[]数组中元素的顺序也需要重新排列 2. 三元组表示稀疏矩阵转置算法1 3. 三元组表示稀疏矩阵转置算法2:快速转置 为了 便于随机存取任意一

    2024年02月05日
    浏览(45)
  • 稀疏矩阵的三元组表示----(算法详解)

    目录 基本算法包括:(解释都在代码里) 1.创建 2.对三元组元素赋值 3.将三元组元素赋值给变量 4.输出三元组 5.转置(附加的有兴趣可以看看) 稀疏矩阵的概念:矩阵的非零元素相较零元素非常小时,这个矩阵就叫稀疏矩阵。 稀疏矩阵可以用 三元组表示 和 十字链表表示

    2024年01月21日
    浏览(39)
  • 稀疏矩阵的加法和乘法(三元组)

    三元组方法: 主要的特点就是最后的结果矩阵均由三元组的形式来表达,调用函数再以矩阵形式输出 (1)稀疏矩阵加法 (下图参考懒猫老师《数据结构》课程相关笔记)  这里与普通矩阵加法不同的是,稀疏矩阵的三元组在加法计算时, 如果两个矩阵中的元素相加不为0时

    2024年01月17日
    浏览(47)
  • [数据结构(C语言版本)上机实验]稀疏矩阵的三元组顺序表压缩存储以及转置实现(含快速转置)

    实现效果: 1、编写程序任意 输入 一个稀疏矩阵,用 三元组顺序表 压缩存储 稀疏矩阵 。 2、对稀疏矩阵进行 转置 , 输出 转置后的矩阵。 对应《数据结构(C语言版)》 第5章 数组与广义表 实验: 1、 掌握下三角矩阵的输入、输出、压缩存储算法; 2、 理解稀疏矩阵的三元

    2024年02月03日
    浏览(46)
  • 稀疏矩阵的三元组存储及快速转置

    目录 问题描述  完整代码  详细分析 本节文章 【问题描述】 实现稀疏矩阵的三元组表存储和快速转置运算。 【输入形式】 输入一个整型的6阶稀疏矩阵。 【输出形式】 输出稀疏矩阵的三元组表形式,使用快速转置方法进行转置运算,输出辅助数组num和cpot的值及转置后的三

    2023年04月26日
    浏览(41)
  • 数组:矩阵快速转置 矩阵相加 三元组顺序表/三元矩阵 随机生成稀疏矩阵 压缩矩阵【C语言,数据结构】(内含源代码)

    目录 题目: 题目分析: 概要设计: 二维矩阵数据结构: 三元数组三元顺序表顺序表结构: 详细设计: 三元矩阵相加: 三元矩阵快速转置: 调试分析: 用户手册: 测试结果:  源代码: 主程序:  头文件SparseMatrix.h:  头文件Triple.h: 总结: 稀疏矩阵A,B均采用 三元组

    2023年04月26日
    浏览(63)
  • PTA:三元组顺序表表示的稀疏矩阵转置Ⅱ

    三元组顺序表表示的稀疏矩阵转置Ⅱ。设a和b为三元组顺序表变量,分别表示矩阵M和T。要求按照a中三元组的次序进行转置,并将转置后的三元组置入b中恰当的位置。 输入第1行为矩阵行数m、列数n及非零元素个数t。 按行优先顺序依次输入t行,每行3个数,分别表示非零元素

    2024年02月06日
    浏览(40)
  • 矩阵基本操作算法

    思路: 利用上三角遍历,实现矩阵转置相加 代码实现:

    2024年02月04日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包