问答题 编写算法打印出由指针Hm指向总表头的以十字链表形式存储的稀疏矩阵中每一行的非零元的个数。注意:行、列及总表头结点的形式为:
【正确答案】正确答案:本题实质是循环链表的计数问题,重点是掌握十字链表的结点结构,设rch是行列表头指针,则rch一>right==rch时该行无非零元素,用i记行号,用一维数组元素A[i]记第i行非零元素个数。当rch=Hm时各行非零元素计算完毕。核心语句段如下: while(rch!=Hm) //初值rch=Hm一>uval.nex,循环完各行列表头 {p:rch一>right ; num=0; //P是稀疏矩阵行内工作指针,num记该行非零个数 while(p!=rch) //完成行内非零元素的查找 {printf(“M[%d][%d]=%d”,p一>row,p一>col,p一>uval.e); num++;p=P一>right;printf C\n”);//指针后移 } A[i++]=num; //数组A记各行非零元个数,i记行号 rch=rch一>uval.next; //移到下一行列表头 }
【答案解析】