【正确答案】三元组存储结构是一种顺序结构,顺序表中的每个结点对应稀疏矩阵的一个非0元素,其中包括3个字段,分别为该元素的行下标、列下标和值,结点间的次序按矩阵的行优先顺序排列(跳过0元素);另外,用第0行的第1个元素存储矩阵的行数、第0行的第2个元素存储矩阵的列数、第0行的第3个元素存储矩阵中非0元素的个数。
本题实现代码如下:
void create(int(*A)[4],int m,int n,int B[][3])
//B的列数位MaxLen,是一个已经定义过的常量,表示B的最大列数
//创建稀疏矩阵对应的三元组表示
{
int i,j,k=1;
for(i=0;i<m;++i) //按行优先顺序遍历A的元素,不为0者存入B中
for(j=0;j<n;++j)
if(A[i][j]!=0)
{
B[k][0]=i;
B[k][1]=j;
B[k][2]=A[i][j];
++k;
}
B[0][0]=m;
B[0][1]=n;
B[0][2]=k-1; //存入非0元素个数
}
int find(int A[][3],int x)
//A的列数位MaxLen,是一个已经定义过的常量
{
int i,t;
t=A[0][2]; //非0元素个数
i=1;
while(i<=t && A[i][2]!=x)
++i;
if(i<=t)
return 1;
else
return 0;
void disp(int A[][3]) //A的列数位MaxLen,是一个已经定义过的常量
{
int m,n,k,i;
m=A[0][0];
n=A[0][1];
k=A[0][2];
cout<<"序号行号列号值"<<endl;
for(i=0;i<=k;++i)
cout<<setw(3)<<i<<setw(4)<<A[i][0]<<setw(5)<<A[i][1]<<setw(5)<<A[i][2]<<endl;
}
【答案解析】