資源簡介
數據結構,該程序是利用c語言實現稀疏矩陣的三元組轉置算法
代碼片段和文件信息
#include??
#define?MAXSIZE?10???//該數組的非零元個數最大不超過10個?
typedef?struct?{
int?ije;??//i為行下標、j為列下標、e為i行j列的數值?
}Triple;??//定義存儲行數、列數和數值的三元組結構體?
typedef?struct{
Triple?data[MAXSIZE+1];???//非零元三元組表,data[0]未用?
int?munutu;????????????//mu為矩陣的行數、nu為矩陣的列數、tu為矩陣非零元的個數?
}TSMatrix;
TSMatrix?createSMatrix(int?S[5][6])???//根據傳入的稀疏矩陣創建三元組表?
{
TSMatrix?St;
int?t=0mnk=1;????????????//t為計算矩陣中非零元的個數的計數器,m為傳入矩陣的行數,n為傳入矩陣的列數,?k為記錄三元組表data個數的計數器?
for(m=1;m<5;m++)
{
for(n=1;n<6;n++)??//行為外循環,列為內循環?,當矩陣的值為非零值時,將此元素的行下標、列下標和元素值分別賦值給data三元組表的元素,
//另外,?計算非零值個數的計數器t加一?
if(S[m][n]!=0)
{
t++;
????St.data[k].i=m;
????St.data[k].j=n;
????St.data[k].e=S[m][n];
k++;
?????} ?
}??
St.tu=t;
St.mu=4;
St.nu=5;//將此時的矩陣的行數、列數、以及非零值的個數分別賦給mu、nu、tu?
printf(“轉置前行數為4列數為5非零值有%d個\n“t);
return(St);
}
TSMatrix?FastTransSMatrix(TSMatrix?St)
{//將三元組重新進行排序,實現矩陣的轉置?
int?qpcola;??//定義變量q來存放轉置后位于原矩陣中第col列的非零元的位置標數
???????????????//定義變量p來對原三元組的非零值進行計數和標號
???//定義變量col?來存放原矩陣的列標?
int?num[10]cpot[10];??//?使用num[col]數組表示矩陣St中第?col列中的非零元個數
??????????????????????//cpot[col]?表示St?中的col列中第一個非零元在轉置后三元組表中的位置?
TSMatrix?Mt;?????????//定義?TSMatrix結構體變量,來存放轉置后的三元組數表和行列數和非零值?
Mt.mu=St.nu;????????//將原三元組的行數(列數)給轉置后三元組的列數(行數)
Mt.nu=St.mu;
Mt.tu=St.tu;
if(Mt.tu)????????
{
for(col=1;col<=St.nu;++col)???????//利用循環語句逐列掃描,先將存放每一列的數組num置零,便于計數?
num[col]=0;?
for(a=1;a<=St.tu;++a)????????????//利用循環語句將每一列中的非零元的個數計算下來存放在每一列的num數組中?
++num[St.data[a].j];
cpot[1]=1;??????????????????????//易知,第一列的第一個非零元的位置為1?
for(col=2
- 上一篇:C語言大作業-班費收支管理系統
- 下一篇:拉格朗日插值與線性插值 c語言代碼,有注釋
評論
共有 條評論