200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示

稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示

时间:2019-05-18 22:46:51

相关推荐

稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示

typedef struct OLNode{

int i,j; //该非零元的行列下标

ElemType e;

struct OLNode *right ,*down; //该非零元所在行表、列表的后继链域

} OLNode; *OLink;

typedef struct {

OLink *rhead , *chead; //行和列 链表头指针向量基址 由CreateSMatrix分配

int mu,nu,tu; //稀疏矩阵的行数列数及非零元个数

} CrossList;

Status CreateSMatrix_OL(CrossList &M)

{//创建稀疏矩阵M 采用十字链表存储表示

if(M)

{

free(M);

}

scanf(&m,&n,&t); //输入M的行数列数和非零元个数

M.mu = m;

M.nu= n;

m.tu = t;

if(!(M.rhead = (OLink *)malloc(sizeof(OLink)*(m+1))))

exit(OVERFLOW);

if(!(M.chead = (OLink *)malloc(sizeof(OLink)*(n+1))))

exit(OVERFLOW);

M.rhead[] = M.chead[] = NULL;//初始化行列头指针向量,各行列链表为空链表

for(scanf(&i,&j,&e); i != 0 ; scanf(&i,&j,&e))

{ //按任意次序输入非零元

if(!(p = (OLNode *)malloc(sizeof(OLNode))))

exit(OVERFLOW);

p->i = i;

p->j = j;

p->e = e; //创建新节点

if(M.rhead[i] ==NULL || M.rhead[i].j > j)

{

p->right = M.rhead[i];

M.rhead[i] = p;

}

else

{

for(q = m.rhead[i];(q->right) && q->right->j right);

p->right = q->right;

q->right = p;

} //完成行插入

if(M.chead[j] == NULL || M.rhead[j]->i >i)

{

p->dowm = M.chead[j];

M.chead[j] = p;

}

else

{

for(q = M.ched[j]; (q->down) && q->down->i < i; q= q->down);

p->down = q->down;

q->down = p; //完成列插入

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。