稀疏矩阵的压缩存储方法有()。
A.三列二维数组和邻接表
B.邻接矩阵和三列二维数组
C.邻接矩阵和邻接表
D.三元组表和十字链表
A.三列二维数组和邻接表
B.邻接矩阵和三列二维数组
C.邻接矩阵和邻接表
D.三元组表和十字链表
基于三元组的稀疏矩阵转置的处理方法有两种,以下运算按照矩阵A的三元组a.data的次序进行转置(快速转置),请在______处用适当的语句予以填充。
Fast_Trans_Sparmat(SpMatrixTp a,SpMatrixTp*b)
{ (*b).mu=a.nu;(*b).nu=a.mu;(*b).tu=a.tu;
if(a.tu)
{ for(col)=1;______col++)unm[col]=0
for(t=1;t<=a.tu;t++)num[a.data[t].j]++;
cpot[1]=1;
for(col=2;col<=a.nu;col++)cpot[col]=______;
for(p=1;p<=a.tu;p++)
{ col=a.data[p].j;
q=cpot[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;
______;
}
}
}
已知稀疏矩阵采用带行表的三元组表表示,其形式说明如下:
define MaxRow 100 //稀疏矩阵的最大行数
typedef struct{
int i,j,v; //行号、列号、元素值
}TriTupleNode;
typedef struct{
TriTupleNode data[MaxSize];
int RowTab[MaxRow+1]; //行表
int m,n,t; //矩阵的行数、列数和非零元个数
}RTriTupleTable; 下列算法f31的功能是,以行优先的顺序输入稀疏矩阵的非零元(行号、列号、元素值),建立稀疏矩阵的带行表的三元组表存储结构。请在空缺处填入合适内容,使其成为一个完整的算法。(注:矩阵的行、列下标均从1起计)
void f31(RTriTupleTable*R)
{ int i,k;
scanf("%d%d%d",&R—>m,&R—>n,&LR—>t);
R—>RowTab[1]=0;
k=1; //k指示当前输入的非零元的行号
for(i=0;[ ① ];i++)
{ scanf("%d%d%d",[ ② ],[ ③ ],&R—>data[i].v);
while(k<R->data[i].i)
{[ ④ ];
R—>RowTab[k]=i;
}
}
}
Trans_Sparmat(SpMatrixTp a,SpMatrixTp*b)
{ (*b).mum=a.nu;(*b).nu=a.mu;(*b).tu=a.tu
if(a.tu)
{ q=1;
for(col=1;______;col++)
for(p=1;p<=a.tu;p++)
if(______)==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;
______;
}
}
}
若某矩阵元素在B中存放的位置为k,那么该元素在原矩阵中的行号i是()。
A、
B、
C、
D、
A.通过一定的存储方法实现数据的压缩
B.通过一定的算法实现数据压缩
C.通过一定的数据分类实现数据的压缩
D.通过一定的数据汇总实现数据的压缩