数据结构习题及答案
源代码在线查看: 5.26.c
5.26③ 试编写一个以三元组形式输出用十字链表
表示的稀疏矩阵中非零元素及其下标的算法。
要求实现以下函数:
void OutCSM(CrossList M, void(*Out3)(int, int, int));
/* 用函数Out3,依次以三元组格式输出十字链表表示的矩阵 */
稀疏矩阵的十字链表存储表示:
typedef struct OLNode {
int i,j; // 该非零元的行和列下标
ElemType e; // 非零元素值
OLNode *right,*down; // 该非零元所在行表和列表的后继链域
}OLNode, *OLink;
typedef struct {
OLink *rhead,*chead; // 行和列链表头指针向量基址
int mu,nu,tu; // 稀疏矩阵的行数、列数和非零元个数
}CrossList;
void OutCSM(CrossList M, void(*Out3)(int, int, int))
/* 用函数Out3,依次以三元组格式输出十字链表表示的矩阵 */
{
struct OLNode *p;
int i;
for(i=1;i {
if(M.rhead[i])
for(p=M.rhead[i];p;p=p->right)
Out3(p->i,p->j,p->e);
}
}