稀疏矩陣(三元組順序表實現)

2021-08-26 00:21:01 字數 1236 閱讀 8120

定義了乙個稀疏矩陣類,有轉置和相乘,相加三個功能,主要是熟悉稀疏矩陣的三元組順序表儲存的一些操作,和一般的矩陣不同的地方,兩個轉置的演算法,第乙個是較容易想到的,書上管它叫「按需點菜」法,就是按一開始列的順序,乙個個轉為新矩陣中行的順序。第二個叫作「按位就坐」法,就是條件兩個輔助陣列,確定每一列中第乙個非零元在稀疏矩陣中儲存的位置,從而可以在操作時,更為容易地實現矩陣轉置後可以按行遞增的順序排列整齊。

稀疏矩陣的乘法,我自己覺得確實有難度,研究了一天才研究清楚這個東西,如果按和一般矩陣那樣去做的話,雖然會浪費多一點時間,但是**量和思考量就相對少得多,但是這也是演算法的特別之處吧。 下面是**,有較為清楚的解釋

檔案"dingyi.h"

#define maxtemr 100 class sparsematrix; //向前宣告 class matrixterm//矩陣元素類 ; class sparsematrix } } terms=s; int *num=new int[r]; for(int m=0;mcols!=b.rows) return false; q.rows=this->rows; q.cols=b.cols; q.terms=0; q_sum=new int[b.cols]; if(this->terms*b.terms!=0) } for(q_col=0;q_colrows!=b.rows||this->cols!=b.cols) return false; int sum=0; int p=0;//指向a的當前項 int t=0;//指向b的當前項 int k=0;//指向c的當前項 while( pterms && tsmarray[p].row==b.smarray[t].row) } else if(this->smarray[p].colsmarray[p].row; c.smarray[k].col=this->smarray[p].col; c.smarray[k].value=this->smarray[p].value; k++;p++; } else } else if(this->smarray[p].rowsmarray[p].row; c.smarray[k].col=this->smarray[p].col; c.smarray[k].value=this->smarray[p].value; k++;p++; } else } while(pterms) while(t

測試函式"main.cpp"

#include"dingyi.h" #includeint main() { sparsematrix sm,t,f; sm.initmatrix(); cout<<"矩陣sm 為:"<

稀疏矩陣的三元組順序儲存

該資料結構的操作主要是陣列的相加 和相乘,這兩個演算法全是我個人所寫,絕無參考,經測試應該少有bug a.h include define false 0 define true 1 define ok 1 define error 0 define max size 100 typedef int...

C C 利用三元組實現稀疏矩陣運算

三元組 x,y z 其中 x,y 表示非零元位置,z表示該座標的值 由於實際操作時,我們所用的矩陣0非常多,所以乙個乙個輸入值很浪費時間,也浪費空間,所以用一些三元組表示非零元即能表示乙個矩陣 三元組稀疏矩陣表示一些圖也是很不錯的選擇 這樣就很浪費空間,三元組直接 0,1 1 1,2 1 3,4 1...

資料結構習題 稀疏矩陣加法 三元組順序表

以下為功能函式的 define maxsize 12500 最大非零元素 typedef int elemtype typedef struct tripletriple 三元組結點定義 typedef struct tsmatrixtsmatrix 三元組順序表定義 將矩陣m和矩陣t相加的結果儲存...