数据结构---三元组顺序表------稀疏矩阵的转置和快速转置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构---三元组顺序表------稀疏矩阵的转置和快速转置
#include<>
#include<>
#include<>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INEEASLIBE -1
#define OVERFLOW -2
#define maxsize 100
typedef int status;
typedef int elemtype;
typedef struct
{
int i,j;
elemtype e;
}elem;
typedef struct
{
elem data[maxsize+1];
int mu,mn,tu;
}matrix;
status showmatrix(matrix M)
{
int i,j,k=1;
for(i=1;i<=;i++)
{
for(j=1;j<=;j++)
{
if(i==[k].i&&j==[k].j)
{
printf("%d\t",[k].e);
k++;
}
else
printf("0\t");
}
printf("\n");
}
return OK;
}
status trans(matrix M,matrix &T)
{
int i=1,j=1,k=1;
=;
=;
=;
while(i<=
{
for(;k<=;k++)
if[k].j==i)
{
[j].e=[k].e;
[j].i=[k].j;
[j].j=[k].i;
j++;
}
k=1;
i++;
}
return OK;
}
status initmatrix(matrix &M)
{
printf("请输入该矩阵行数mu和列数mn和非零元个数tu\nmu=");
scanf("%d",&;
getchar();
printf("\nmn=");
scanf("%d",&;
getchar();
printf("\ntu=");
scanf("%d",&;
getchar();
if>maxsize)
{
printf("非零元个数已超过定义的值\n请重新输入tu=");
scanf("%d",&;
getchar();
}
printf("请输入非零元和它所在的行数和列数(矩阵从先从左到右,再从上到下输入)\n");
for(int i=1;i<=;i++)
{
if(i==1)
printf("输入非零元:");
else
printf("输入下一个非零元:");
scanf("%d",&[i].e);
getchar();
printf("输入该非零元的行数:");
scanf("%d",&[i].i);
getchar();
while[i].i>||[i].i<1)
{
printf("输入的行数不合法\n请重新输入行数:");
scanf("%d",&[i].i);
getchar();
}
printf("输入该非零元的列数:");
scanf("%d",&[i].j);
getchar();
while[i].j>||[i].j<1)
{
printf("输入的列数不合法\n请重新输入列数:");
scanf("%d",&[i].j);
getchar();
}
}
return OK;
}
status fasttrans(matrix M,matrix &T)
{
=;
=;
=;
int *num,*pose;
num=(int*)malloc*sizeof(int));
pose=(int*)malloc*sizeof(int));
*(pose)=1;
int i=1;
for(;i<=;i++)
*(num+i-1)=0;
for(i=1;i<=;i++)
{
*(num+[i].j-1)=*(num+[i].j-1)+1;
}
for(i=2;i<=;i++)
{
*(pose+i-1)=*(pose+i-2)+*(num+i-2);
}
for(i=1;i<=;i++)
{
[*(pose+[i].j-1)].i=[i].j;
[*(pose+[i].j-1)].j=[i].i;
[*(pose+[i].j-1)].e=[i].e;
*(pose+[i].j-1)=*(pose+[i].j-1)+1;
}
return OK;
}
main()
{
matrix M,T;
char c;
while(1)
{
printf("1:初始化矩阵\n2:显示矩阵\n3:普通转置\n4:快速转置\n");
scanf("%c",&c);
getchar();
switch(c)
{
case '1':
if(initmatrix(M)==OK)
printf("初始化成功\n");
break;
case '2':
showmatrix(M);
break;
case '3':
trans(M,T);
printf("转置后矩阵为:\n");
showmatrix(T);
break;