稀疏矩阵十字链表类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;      //完成列插入

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值