数据结构---三元组顺序表------稀疏矩阵的转置和快速转置

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档