十字链表的实现
当稀疏矩阵的非零元数量和位置在操作过程中变化较大时(如矩阵相加),便不再适宜采用顺序存储,此时使用链式存储更为恰当。
十字链表的实现
typedef struct{
int i,j;
ElemType e;
OLNode *right,*down;
//right指示同一行下一个非零元,down指示同一列下一个非零元
}OLNode,*OLink;
typedef struct
{
OLink *rhead,*chead;
//两个一维数组,分别指示行链表的头指针和列链表的头指针
int mu,nu,tu;
}CrossList;
十字链表的创建
Status CreateMatrix(CrossList *M){
int m,n,t;
int i,j;
ElemType e;
OLNode *q,*p;
if(M){
free(M);
}
printf("输入矩阵的行数、列数和非零元素个数:");
scanf("%d%d%d",m,n,t);
M->mu=m;
M->nu=n;
M->tu=t;
//确定M的行列数和个数
M->rhead=(OLink*)malloc((m+1)*sizeof(OLink));
M->chead=(OLink*)malloc((n+1)*sizeof(OLink))