数据结构---三元组顺序
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
------稀疏矩阵的转置和快速转置
数据构结结---三元序表结结结结------稀疏矩的置和快速置结结结结结结结结结
#include
#include
#include
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INEEASLIBE -1#define OVERFLOW -2#define maxsize 100typedef 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<=M.mu;i++)
{
for(j=1;j<=M.mn;j++)
{
if(i==M.data[k].i&&j==M.data[k].j)
{
printf("%d\t",M.data[k].e);
k++;
}
else
printf("0\t");
}
printf("\n");
}
return OK;
}
status trans(matrix M,matrix &T)
{
int i=1,j=1,k=1;
T.tu=M.tu;
T.mn=M.mu;
T.mu=M.mn;
while(i<=M.mn)
{
for(;k<=M.tu;k++)
if(M.data[k].j==i)
{
T.data[j].e=M.data[k].e;
T.data[j].i=M.data[k].j;
T.data[j].j=M.data[k].i;
j++;
}
k=1;
i++;
}
return OK;
}
status initmatrix(matrix &M)
{
printf("请请请请请请请入矩行数mu和列数mn和非零元个数tu\nmu=");scanf("%d",&M.mu);
getchar();
printf("\nmn=");
scanf("%d",&M.mn);
getchar();
printf("\ntu=");
scanf("%d",&M.tu);
getchar();
if(M.tu>maxsize)
{
printf("非零元个数已超定的请请请请请\n请请请重新入tu=");
scanf("%d",&M.tu);
getchar();
}
printf("请请入非零元和它所在的行数和列数(矩从先从左到右,再请请请请请请请请请
从上到下入请请)\n");
for(int i=1;i<=M.tu;i++){
if(i==1)
printf("请入非零元:");
else
printf("请入下一个非零元:");
scanf("%d",&M.data[i].e);
getchar();
printf("请请请请请请请请入非零元的行数:");
scanf("%d",&M.data[i].i);
getchar();
while(M.data[i].i>M.mu||M.data[i].i<1)
{
printf("请入的行数不合法\n请请请请请重新入行数:");
scanf("%d",&M.data[i].i);
getchar();
}
printf("请请请请请请请请入非零元的列数:");
scanf("%d",&M.data[i].j);
getchar();
while(M.data[i].j>M.mn||M.data[i].j<1)
{
printf("请入的列数不合法\n请请请请请重新入列数:");
scanf("%d",&M.data[i].j);
getchar();
}
}
return OK;
}
status fasttrans(matrix M,matrix &T)
{
T.tu=M.tu;
T.mn=M.mu;
T.mu=M.mn;
int *num,*pose;
num=(int*)malloc(M.mn*sizeof(int));pose=(int*)malloc(M.mn*sizeof(int));*(pose)=1;
int i=1;
for(;i<=M.mn;i++)
*(num+i-1)=0;
for(i=1;i<=M.tu;i++)
{
*(num+M.data[i].j-1)=*(num+M.data[i].j-1)+1;
}
for(i=2;i<=M.mn;i++)
{
*(pose+i-1)=*(pose+i-2)+*(num+i-2);}
for(i=1;i<=M.tu;i++)
{
T.data[*(pose+M.data[i].j-1)].i=M.data[i].j;
T.data[*(pose+M.data[i].j-1)].j=M.data[i].i;
T.data[*(pose+M.data[i].j-1)].e=M.data[i].e;
*(pose+M.data[i].j-1)=*(pose+M.data[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;
}
}
}