数据结构——稀疏矩阵(C语言)

加粗样式

矩阵

    • 什么是矩阵
    • 代码实现
      • 三元组以及普通转置
        • 矩阵以及三元组的结构体
        • 相应功能的函数实现
          • 初始化稀疏矩阵
          • 矩阵转置
          • 输出
          • 相应功能集成调用
      • 主函数
    • 运行截图


什么是矩阵

矩阵,简单的来看,就是二维数组。二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。
数据结构——稀疏矩阵(C语言)_第1张图片


代码实现

三元组以及普通转置

矩阵以及三元组的结构体

#include
#include
#define MAXSIZE 12500

typedef struct
{
	int i,j;//该非零元的列下标和行下标 
	int e;
}Triple;

typedef struct
{
	Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用 
	int mu,nu,tu;//矩阵的行数、列数和非零元个数 
}TSMatrix;

相应功能的函数实现

初始化稀疏矩阵
int InitTriple(TSMatrix *M)
{//稀疏矩阵的初始化 
	int i,j,k,n,e;
	printf("请输入稀疏矩阵非零元素的个数:\n");
	scanf("%d",&n);
	M->tu=n;
	printf("//按顺序从0到%d输入\n",M->mu);
	for(k=1;k<=n;k++)
	{
		printf("请输入第%d个元素的行、列和赋值\n",k);
		scanf("%d %d %d",&i,&j,&e);
		if(i==1&&j==1)
		{
			M->data[k].i=i;
			M->data[k].j=j;
			M->data[k].e=e;
		}
		else
		{
			M->data[k].i=i-1;
			M->data[k].j=j-1;
			M->data[k].e=e;
		}

	}
	return 0;
}
矩阵转置
int TransposeSMatrix(TSMatrix M,TSMatrix &T)
{//普通转置 
	T.mu=M.nu;
	T.nu=M.mu;
	T.tu=M.tu;
	if(T.tu)
	{
		int q=1;
		for(int col=0;col<=M.nu;++col)
			for(int p=1;p<=M.tu;++p)
				if(M.data[p].j==col)
				{
					T.data[q].i=M.data[p].j;
					T.data[q].j=M.data[p].i;
					T.data[q].e=M.data[p].e;
					++q;
				}
	}
	
输出
int displayMatrix(TSMatrix *M)
{//输出非零元素 
	int i,j,p,q,k=0;
	printf("\n");
	for(p=0;p<M->mu;p++)
	{
		for(q=0;q<M->nu;q++)
			if(M->data[k].i==p&&M->data[k].j==q)
			{
				printf("%d\t",M->data[k].e);
				k++;
			}
			else
			{
				printf("0\t"); 
			}	
			printf("\n");
	}
	return 1;
}

int display(TSMatrix *M)
{//输出矩阵0元素 
	int i,j,p,q;
	printf("请输入矩阵的行、列:\n");
	scanf("%d %d",&i,&j);
	M->mu=i;
	M->nu=j;
	printf("初始化矩阵显示为:\n");
	for(p=0;p<M->mu;p++)
	{
		for(q=0;q<M->nu;q++)
		printf("0\t");
		printf("\n\n");
		}
		return 1;	
}
相应功能集成调用
void show()
{	
	printf("请输入你想选择的序号\n");
	printf("1.初始化矩阵\n");
	printf("2.添加元素\n");
	printf("3.转置矩阵\n");
	printf("0.退出\n");	
	printf("------------\n");
}

主函数

int main()
{
	TSMatrix T1,T2;
	int n;
	printf("欢迎使用矩阵系统!\n\n");
	show();
	scanf("%d",&n);
	while(n!=0)
	{	
		switch(n)
		{
			case 1: display(&T1);break;
			case 2:	InitTriple(&T1);
					printf("加入元素后的矩阵显示为:\n");
					displayMatrix(&T1);break;
			case 3: TransposeSMatrix(T1,T2);
				    printf("输出转置后的行、列和非零元个数:%d,%d,%d\n",T2.mu,T2.nu,T2.tu);
    			    printf("\n");
    				printf("行\t列\t值\n"); 				
				    for(int q=1;q<=T2.tu;++q)
				    	{
				        	printf("%d\t%d\t%d\n",T2.data[q].i+1,T2.data[q].j+1,T2.data[q].e);
				    	}
				    	printf("转置后的矩阵为:\n");
					displayMatrix(&T2);break;
		}	
		printf("\n");
		show();
		scanf("%d",&n);
	}
	return 0;
 } 

运行截图

数据结构——稀疏矩阵(C语言)_第2张图片

数据结构——稀疏矩阵(C语言)_第3张图片


希望对你有所帮助

你可能感兴趣的