稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示
typedef struct OLNode{
int ?i,j; ? ? ? ? ? ? ? ? //該非零元的行列下標(biāo)
ElemType ? ?e;
struct ?OLNode ? ?*right ?,*down; ? ? ?//該非零元所在行表、列表的后繼鏈域
} ?OLNode; ? *OLink;
typedef ?struct {
OLink ?*rhead , ? *chead; ? ? //行和列 鏈表頭指針向量基址 由CreateSMatrix分配
int ? ? mu,nu,tu; ? ? ? ? ? ? ? ? ?//稀疏矩陣的行數(shù)列數(shù)及非零元個(gè)數(shù)
} CrossList;
Status CreateSMatrix_OL(CrossList ?&M)
{ ? ? ? ? //創(chuàng)建稀疏矩陣M ? ?采用十字鏈表存儲(chǔ)表示
if(M)
{
free(M);
}
scanf(&m,&n,&t); //輸入M的行數(shù)列數(shù)和非零元個(gè)數(shù)
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; ? ?//創(chuàng)建新節(jié)點(diǎn)
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; ? ? ?//完成列插入
}
}
}
總結(jié)
以上是生活随笔為你收集整理的稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百度文库宣布接入文心一言,国内首个生成式
- 下一篇: 大妈抢上地铁致骨折起诉索赔22万 二审判