資源簡(jiǎn)介
稀疏矩陣相加、相乘和轉(zhuǎn)置(用三元組實(shí)現(xiàn))
代碼片段和文件信息
#include????
#include?????
int?const?N=4;??????????????//常量??數(shù)組的大小
int?const?MaxSize=100;????//?最大?為100??常量
typedef?int?ElemType;?????//?ElemType?==?int
typedef?struct?????//結(jié)構(gòu)體
{???
????int?r;??????????//行號(hào)????
????int?c;??????????//列號(hào)????
????ElemType?d;????//元素值????
}TupNode;????????//三元組定義????
typedef?struct?????//?結(jié)構(gòu)體
{???
????int?rows;???//?行
????int?cols;???//?列
????int?nums;???//非零元素個(gè)數(shù)????
????TupNode?data[MaxSize];???
}TsMatrix;??????//三元組存儲(chǔ)結(jié)構(gòu)????
???
void?CreatMat(TsMatrix?&tElemType?A[N][N])???//三元組表示稀疏矩陣????
{???
????int?ij;???
????t.rows=N;t.cols=N;t.nums=0;???//?行列賦值
????for(i=0;i ????{???
????????for(j=0;j ????????????if(A[i][j]!=0)???
????????????{???
????????????????t.data[t.nums].r=i;???//?Tsatrix中的TupNode?data[MaxSize]??從0開(kāi)始儲(chǔ)存數(shù)組A的非零值??r?c分別存儲(chǔ)行列值
????????????????t.data[t.nums].c=j;???
????????????????t.data[t.nums].d=A[i][j];???
????????????????t.nums++;???
????????????}???
????}???
}???
void?DispMat(TsMatrix?t)??//輸出三元組????
{???
????int?i;???
????if(t.nums<1)???//?沒(méi)有直接返回??
????????return?;???//?有的話(huà)輸出
????printf(“\t行數(shù):%d\t列數(shù):%d\t非零個(gè)數(shù):%d\n“t.rowst.colst.nums);???
????printf(“\t--------------------------\n“);???
????for(i=0;i ????????printf(“\t%d\t%d\t%d\n“t.data[i].rt.data[i].ct.data[i].d);???
}???
void?FastTranMat(TsMatrix?tTsMatrix?&tb)????????????//矩陣的快速轉(zhuǎn)置????
{???
????int?colpqsnum[N]cpot[N];???
????tb.rows=t.cols;tb.cols=t.rows;tb.nums=t.nums;???
????if(t.nums)??????????????????????????????????????????//?如果存在執(zhí)行下面函數(shù)
????{???
??????????for(col=0;col ????????????????????????????????????????????????????????//先置t矩陣每列非0元個(gè)數(shù)均為0????
??????????for(s=0;s ????????????????????????????????????????????????????????//求t中每一列非0元個(gè)數(shù)????
????????????cpot[0]=0;???????????????????????????????????//t中第一列第一個(gè)非元在tb中的序號(hào)為1????
??????????for(col=1;col ??????????cpot[col]=cpot[col-1]+num[col-1];???
??????????????????????????????????????????????????????????//求t中第col列中第一個(gè)非0元在T中的序號(hào)????
???????????for(p=0;p ???????????{???
??????????????col=t.data[p].c;?????????????????????????????//記下t中第p個(gè)元素的列號(hào)????
???????????????q=cpot[col];???????????????????????????????//該列中第一個(gè)非0元在tb中的序號(hào)????
??????????????tb.data[q].r=t.data[p].c;???
??????????????tb.data[q].c=t.data[p].r;???
??????????????tb.data[q].d=t.data[p].d;???
??????????????++cpot[col];???
???????????}???
????}???
}???
int?MatAdd(TsMatrix?aTsMatrix?bTsMatrix?&c)????????????//?矩陣的相加
{???
????int?i=0j=0k=0;???
????ElemType?v;???
????if(a.rows!=b.rows||a.cols!=b.cols)???
????????return?0;????????????????????????????????????//行數(shù)或列數(shù)不相等時(shí)不能進(jìn)行相加????
????c.rows=a.rows;c.cols=a.rows;????????????????????//c的行數(shù)和列數(shù)與a的相同????
????while(i ????{???
????????if(a.data[i].r==b.data[j].r)???
????????{???
????????????if(a.data[i]
評(píng)論
共有 條評(píng)論