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

  • 格式:doc
  • 大小:20.50 KB
  • 文档页数:5

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

#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;

case '4':

fasttrans(M,T);

printf("转置后矩阵为:\n");

showmatrix(T);

break;

default:

printf("输入不合法\n");

break;

}

}

}