日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 稀疏矩阵十字链表类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; ? ? ?//完成列插入

}

}

}

總結

以上是生活随笔為你收集整理的稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。