該資料結構的操作主要是陣列的相加 和相乘,這兩個演算法全是我個人所寫,絕無參考,經測試應該少有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 的每一項的計算公式為 對於用三元組的形式表示的稀疏矩陣,其儲存的內容只有非零元素的值...