问答题 说明稀疏矩阵的三元组存储结构并实现稀疏矩阵的基本操作。
【正确答案】三元组存储结构是一种顺序结构,顺序表中的每个结点对应稀疏矩阵的一个非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; }
【答案解析】