⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syzb.cpp

📁 三元组表的建立与这个三元组表的一种转置算法
💻 CPP
字号:
/***************************************/ 
/*稀疏矩阵的三元组表的另一种算法的转置*/
/*************************************/
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{int i,j;
 ElemType v;
}Mat;
typedef struct
{int m,n,t;
 Mat data[MAXSIZE];
}Spmatrix;

Spmatrix a,b;

int p,q,col,k,*pot,*num;

void creat();
void OutMatrix(Spmatrix ma);
void fasttran(Spmatrix a,Spmatrix *b);
int GetMatrixNum(Spmatrix ma);

void main()
{int cord;
	do
	{
		printf("\n      主菜单    \n");
		printf("    1  建立矩阵M    \n");
		printf("    2  转置矩阵M为N    \n");
		printf("    3  取矩阵M元素数    \n");
		printf("    4  结束程序运行  \n");
		printf("---------------------\n");
		printf("请输入您的选择(1,2,3,4):");
		scanf("%d",&cord);
		switch(cord)
		{
		case 1:{
			creat();
			printf("\n矩阵M:\n");
			OutMatrix(a);
			   }break;
		case 2:{
			fasttran(a,&b);
			printf("\n矩阵M:\n");
			OutMatrix(a);
			printf("\n矩阵N:\n");
			OutMatrix(b);
			   }break;
		case 3:{
			printf("\n矩阵M中的元素数为:%d\n",GetMatrixNum(a));
			   }break;
		case 4:exit(0);
		}
	}while(cord<=4);
}

void OutMatrix(Spmatrix ma)
{
	for(int i=0;i<ma.t;i++)
		printf("(%d,%d,%d)\n",ma.data[i].i,ma.data[i].j,ma.data[i].v);
}

void creat()
{   int i,j;
	ElemType x;
	int k;
	k=0;
	printf("\n请输入矩阵大小(m*n):");
	scanf("%d*%d",&a.m,&a.n);
	printf("\n请输入矩阵元素三元组(i,j,x):(退出请输入0,0,0)\n");
	do
	{
		scanf("%d,%d,%d",&i,&j,&x);
		//退出
		if(i==0&&j==0&&x==0)
			break;
		//下标越界
		if(i>a.m||j>a.n)
		{
			printf("\n输入的数组越界!\n");
			break;
		}
		a.data[k].i=i;
		a.data[k].j=j;
		a.data[k].v=x;
		a.t++;
		k++;
	}while(k<a.m*a.n);
}

void fasttran(Spmatrix a,Spmatrix *b)
{   b->m=a.n;
	b->n=a.m;
	b->t=a.t;
	if(a.t!=0)
	{for(col=1;col<=a.n;col++) num[col]=0;
			for(k=0;k<a.t;k++) num[a.data[k].j]++;
			pot[1]=0;
			for(col=2;col<=a.n;col++) pot[col]=pot[col-1]+num[col-1];
			for(p=0;p<=a.t;p++)
			{col=a.data[p].j;   q=pot[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;
				pot[col]++;
			}
	}
}

int GetMatrixNum(Spmatrix ma)
{   if(ma.t!=0)
		return(ma.t);
	else return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -