十字鍊錶表示稀疏矩陣的基本操作

2021-04-12 12:11:12 字數 2198 閱讀 3409

【問題描述】兩個相同行數和列數的稀疏矩陣用十字鍊錶實現加法運算

【資料描述】

typedef struct ele elenode;

【演算法描述】

(1) 若q->j>v->j,則需要在c矩陣的鍊錶中插入乙個值為bij的結點,,修改v=v->right。

(2) 如q->jj,則需要在c矩陣的鍊錶中插入乙個值為aij的結點,修改q=q->right。

(3) 若q->j = = v->j且q->e + v->e ! = 0,則需要在c矩陣的鍊錶中插入乙個值為aij+bij的結點,修改q=q->right,v=v->right。

重複(1)--(3)完成一行的操作。修改p=p->down,u=u->down後,再繼續下一行。【c源程式】

#include

#include

typedef struct ele elenode;

/*建立乙個元素全為零的稀疏矩陣的十字鍊錶*/

elenode *createnullmat(int m,int n)         / * m行n列 */

for(p=h->right,k=0;krow=1000;                             / * 設矩陣不會超過1000行 * /

p->down = p;                         / * 每個列煉表是乙個環 * /

p->right = k<n-1 ? p+1 : h->right;    / *使全部列煉表頭結點構成環 * /

}return h;

}//

int insertnode(elenode *a ,int row,int col,double val)

if(q->col==col) return -1;                 / * 該行已有col列元素 * /

u=a->right+col;v=u->down;

while(v->rowdown;}

if(v->row==row) return -1;            / * 該列已有row行元素 * /

p->right = r; r->right = q;             / * 插入到行鏈中 * /

u->down = r; r->down = v;               / * 插入到列鏈中 * /

a->val=val;

return 0;                                / * 插入成功 * /

}elenode *readmat()

printf("輸入下一行有非零元素的行號(-1表示輸入結束)");

scanf("%d",&i);

}return h;

}void showmat(elenode *a)

else

printf("0  ");

}printf("/n");}}

elenode *matadd(elenode *a,elenode *b)

else if(q->colcol)

else

p=p->down;u=u->down;

}while(p!=a->down);

return r;

}void main()

【測試資料】

輸入a 矩陣:  4  0  0  0       輸入b矩陣: 0  1  0  1       輸出:4  1  0  1

0  5  0  9                          0 –5  0  0              0  0  0  9

0  0  1  0                          1  0  9  0                 1  0  10 0

輸入資料注意事項:

(1)如上面a矩陣,應輸入3行4列

(2)若某行有非零元素,則按下列格式(三元組格式)輸入:

行號  列號  值  列號  值  …  列號  值  -1,如a矩陣的第0行,應輸入0  0  4  -1,最後 的-1表示該行的一組資料輸入結束。

(3)按以上格式逐行地輸入資料,直到輸入的行號的值為-1時,表示稀疏矩陣的全部資料輸入結束。

【說明】

從乙個結點來看,進行比較、修改指標所需的時間是乙個常數;整個運算過程在於對a和b的十字鍊錶逐行掃瞄,其迴圈次數主要取決於a和b矩陣中非零元素的個數ta和tb;由此演算法的時間複雜度為o(ta+tb)。

稀疏矩陣十字鍊錶表示法

稀疏矩陣十字鍊錶表示法和基本運算 include include define m 3 矩陣行 define n 3 矩陣列 define max m n m n 矩陣行列較大者 typedef int elemtype typedef struct mtxn tag matnode 十字鍊錶型別定...

用十字鍊錶表示的稀疏矩陣類

總結 一 在用十字鍊錶結構表示稀疏矩陣時,矩陣中的每乙個非零元素對應乙個結點,每個結點五個域 行域,列域,值域,向下域和向右域,行域和列域分別存放非零元素所在的行號和列號,值域存放非零元素的值,向下域指示同一列中下乙個非零元素的儲存結點序號,向右域指示同一行中下乙個非零元素的儲存結點序號。二 十字鍊...

十字鍊錶 稀疏矩陣

include includetypedef struct olnode olnode,olink typedef struct 行和列煉表頭指標向量基址,由creatsmatrix ol 分配 crosslist 初始化m crosslist型別的變數必須初始化,否則建立 複製矩陣將出錯 bool...