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

2021/10/31 9:09:37

本文主要是介绍编写程序用三元组表示稀疏矩阵的案列转置操作。,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

内容:

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

算法分析

        本题要完成的是三元组表实现稀疏矩阵按列转置操作。首先就是要设立三个函数。函数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);//转置后
}

 



这篇关于编写程序用三元组表示稀疏矩阵的案列转置操作。的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程