資料結構實踐 稀疏矩陣相加

2021-09-23 17:49:51 字數 2454 閱讀 5650

本文針對資料結構基礎系列網路課程(5):陣列與廣義表的實踐專案。

【專案 - 稀疏矩陣相加】

採用三元組儲存稀疏矩陣,設計兩個稀疏矩陣相加的運算演算法

提示1:兩個行數、列數相同的矩陣可以相加

提示2:充分利用已經建立好的演算法庫解決問題

[參考解答1](程式中使用的標頭檔案」tup.h」見稀疏矩陣的三元組表示演算法庫) 

#include 

#include "tup.h"

bool matadd(tsmatrix a,tsmatrix b,tsmatrix &c)

return

true;

}int main()

, ,,,

,};

int b[m][n]=,,

,,,};

creatmat(ta,a);

creatmat(tb,b);

printf("a:\n");

dispmat(ta);

printf("b:\n");

dispmat(tb);

if(matadd(ta, tb, tc))

else

return

0;}

[參考解答2]

下面給出的解答,沒有利用演算法庫中已經實現的assign和value兩個基本運算,而是直接e採取了更為直接的方法去完成。用i和j兩個變數掃瞄三元組a和b,按行序優先的原則進行處理,將結果存放於c中。當a的當前元素和b的當前元素的行號和列號均相等時,將它們的值相加,只有在相加值不為0時,才在c中新增乙個新的元素。

#include 

#include "tup.h"

bool matadd(tsmatrix a,tsmatrix b,tsmatrix &c)

else if (a.data[i].c>b.data[j].c)//a元素的列號大於b元素的列號

else //a元素的列號等於b元素的列號

i++;

j++;}}

else if (a.data[i].r

.data[j].r) //a元素的行號小於b元素的行號

else //a元素的行號大於b元素的行號

}while (i.nums) //a中尚有元素時

while (j.nums) //b中尚有元素時

c.nums=k;

return true;

}int main()

, ,,,

,};

int b[m][n]=,,

,,,};

creatmat(ta,a);

creatmat(tb,b);

printf("a:\n");

dispmat(ta);

printf("b:\n");

dispmat(tb);

if(matadd(ta, tb, tc))

else

return 0

;}

對比兩種方案,「參考解答1」利用assign和value兩個基本運算的方案,可以在只知道「矩陣加法是對應位置的元素相加」的基礎上就可以求解;而「參考解答2」則不得不關注在資料儲存層面的細節,以致於矩陣加法的規則都不容易看出來了。「參考解答2」中繁雜的**,違反了程式設計中諸多的原則(例如模組化),相對「參考解答1」的簡潔中透出的優雅,該不是學習者效仿的思維。

#include 

#include "tup.h"

bool matadd(tsmatrix a,tsmatrix b,tsmatrix &c)

else if (a.data[i].c>b.data[j].c)//a元素的列號大於b元素的列號

else //a元素的列號等於b元素的列號

i++;

j++;}}

else if (a.data[i].r

.data[j].r) //a元素的行號小於b元素的行號

else //a元素的行號大於b元素的行號

c.nums=k;

}return true;

}int main()

, ,,,

,};

int b[m][n]=,,

,,,};

creatmat(ta,a);

creatmat(tb,b);

printf("a:\n");

dispmat(ta);

printf("b:\n");

dispmat(tb);

if(matadd(ta, tb, tc))

else

return 0

;}

資料結構 稀疏矩陣

稀疏矩陣 矩陣中有效資料的個數遠遠小於無效資料的個數,則可以稱之為稀疏矩陣 如果還像以前那樣將每個稀疏矩陣的資料都儲存起來,則會造成記憶體的很大程度的浪費,所以應用特別的儲存方式。稀疏矩陣的壓縮儲存 使用 三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。矩陣的轉置 將...

資料結構 稀疏矩陣

簡單的說,設矩陣amn中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱a為稀疏矩陣。s與m x n的比稱為矩陣的稀疏因子。當用陣列儲存稀疏矩陣中的元素時,僅有少部分的空間被利用,造成空間的浪費,為了節省儲存空間,可以採用一種壓縮的儲存方法來表示稀疏矩陣。由於非零元素的分布一般是沒有規律的,因此在儲...

資料結構 稀疏矩陣

稀疏矩陣時矩陣中的一種特殊情況,其非零元素的個數遠遠小於零元素個數。1.順序儲存 非零元素三元組的結構定義 struct triple 其中row代表行號,col代表列號,val用來儲存元素值 稀疏矩陣的順序儲存型別定義 struct smatrix m,n,t域分別用來儲存稀疏矩陣的行數,列數,非...