ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-10-31 09:08:19  阅读:168  来源: 互联网

标签:SPMatrix 转置 void 矩阵 案列 三元组 int date


内容:

        编写程序用三元组表示稀疏矩阵的案列转置操作。本设计使用三元组表来实现。

算法分析

        本题要完成的是三元组表实现稀疏矩阵按列转置操作。首先就是要设立三个函数。函数InitSPNode()用来建立一个稀疏矩阵的三元组表,就是要输入行数、列数和非零元的值,最后要用(-1,-1,-1)来结束输入;第二函数showMatrix()用来输出稀疏矩阵,算法中按矩阵a的列进行循环处理,对a的每一列扫描三元组,找出相应的元素,若找到了,则交换其行号与列号,并存储到矩阵b的三元组中。最后用函数TransposeSMatrix()用来完成稀疏矩阵的转置算法。算法主要的工作是在配合col的两重循环中完成,时间复杂度为(n*t)。如果非零元素个数t和m*n同数量级,则算法的时间复杂度变为O(m*n²)

概要设计

用三元组表实现系数矩阵的基本操作

函数

void InitSPMatrix(SPMatrix* a) 

void showMatrix(SPMatrix *a)

void TransposeSMatrix(SPMatrix* a, SPMatrix* b)

  

程序运行流程图如下:

 

 

#include<stdio.h>
#include<string.h>
#define Ok 1
#define MAX 10//用户自定义三元组表最大长度
typedef struct//定义三元组表
{
	int i, j;//行,列
	int v;//非0数组中的值
}SPNode;
typedef struct//定义三元组表
{
	int m;//矩阵行
	int n;//矩阵列
	int t;//矩阵中的非零元素(三元组表的长度)
	SPNode date[MAX];
}SPMatrix;
void InitSPMatrix(SPMatrix* a)//输入三元列表
{
	int i, j, k, val, maxrow, maxcol;
	maxrow = 0;
	maxcol = 0;
	i = j = 0;
	k = 0;
	while (i != -1 && j != -1)//rol=-1&&col=-1结束输入
	{
		printf("输入(行 列 值)");
		scanf_s("%d,%d,%d", &i, &j, &val);
		a->date[k].i = i;
		a->date[k].j = j;
		a->date[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++)//这个是行循环,p代表p+1行
	{
		for (q = 0; q <= a->n; q++)//这个是列循环,q代表q+1列
		{
			if (a->date[t].i== p && a->date[t].j == q)//遍历循环输出有v的元素
			{
					printf("%d", a->date[t].v);
					t++;
			}
			else printf("0");//if不成立说明该位置没有输入元素,则输出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)//遍历整个矩阵进行置换
			for(p=0;p<a->t;++p)
				if (a->date[p].j == col)
				{
					b->date[q].i = a->date[p].j;
					b->date[q].j = a->date[p].i;
					b->date[q].v = a->date[p].v;
					++q;
				}
	}
}
void main()
{
	SPMatrix a, b;
	printf("\n结束请输入(-1,-1,-1)\n");
	InitSPMatrix(&a);
	printf("输入矩阵为:\n");
	showMatrix(&a);
	TransposeSMatrix(&a, &b);
	printf("输出矩阵为:\n");
	showMatrix(&b);//转置后
}

 

标签:SPMatrix,转置,void,矩阵,案列,三元组,int,date
来源: https://blog.csdn.net/floruitshow/article/details/121059954

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有