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

2021-06-23 04:26:40 字數 1798 閱讀 6280

該資料結構的操作主要是陣列的相加 和相乘,這兩個演算法全是我個人所寫,絕無參考,經測試應該少有bug

「a.h」

#include

#define false 0

#define true 1

#define ok 1

#define error 0

#define max_size 100

typedef int elemtype;

typedef int status;

typedef structtriple;

typedef structmatrix;

「b.h」

status creatematrix(matrix *m)

}while(k);

(*m).data[i].i=m;

(*m).data[i].j=n;

(*m).data[i].e=e;

} return ok;

}status matrixdestroy(matrix m)

status matrixprint(matrix m)

status matrixcopy(matrix m1,matrix *m2)

status assigndata(triple *data,elemtype e,int m,int n)

status addmatrix(matrix a,matrix b,matrix *c)

j++;

} if(j

assigndata(&(*c).data[k++],m.e+n.e,m.i,m.j); 

//a b元素座標相同的相加

else

assigndata(&(*c).data[k++],m.e,m.i,m.j); 

//a中有b中無的元素進行直接賦值

j=0; 

//care

} //以下**是為了將b中有a中無的三元組賦值 

我們先用陣列(可用指標節約空間)記錄a,b中都有的元素,然後除去這些三元組就是需要的

x[0]=0;

if(x[1]!=0)

for(j=0;j

n=b.data[j];

assigndata(&(*c).data[k++],n.e,n.i,n.j); 

//考慮x[1]

}for(i=0;i

for(j=1;j

n=b.data[x[i]+j];

assigndata(&(*c).data[k++],n.e,n.i,n.j);

}if(x[x]

for(j=x[x]+1;j<=b.tu;j++)

(*c).tu=a.tu+b.tu-x;

return ok;

}status submatrix(matrix a,matrix b,matrix *c)

status mulmatrix(matrix a, matrix b,matrix *c)

j=0;

}  // 

以下演算法將x中座標相同的元素進行累加即為(*c)的該座標值

for(i=0;i

(*c).data[0]=x[0];

for(i=1;i

for(j=0;j<=x;j++)

} if(j>x)

(*c).data[++x]=x[i]; 

//care 是++x傳進去

}(*c).tu=x+1;

return ok;}

「main.h」

#include"a.h"

#include"b.h"

void main()

稀疏矩陣的三元組儲存演算法

稀疏矩陣,是零元素較多的矩陣。一般只要滿足 t 1 3 m n,t是非零元素個數,mn是矩陣行列數,就可以用三元組表示稀疏矩陣,可以節省空間。稀疏矩陣的壓縮儲存採用三元組的方法實現。其儲存規則是 每乙個非零元素佔一行,每行中包含非零元素所在的行號 列號 非零元素的數值。為完整描述稀疏矩陣,一般在第一...

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

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

順序儲存結構的三元組稀疏矩陣的乘法運算

三元組的含義為 行,列,元素值 首先判斷是否滿足進行乘法運算的條件 只有當第乙個矩陣的列數與第二個矩陣的行數相等時才可進行運算。運算的規則如下 矩陣a m p 和矩陣b p n 相乘得到矩陣c m n 則c m n 的每一項的計算公式為 對於用三元組的形式表示的稀疏矩陣,其儲存的內容只有非零元素的值...