📄 syzb.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 + -