使用順序儲存結構儲存稀疏矩陣,並實現轉置和乘法運算。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//順序結構的稀疏矩陣:轉置+乘法
#define xishu_max 100
#define xishu_increment 100
typedef structarray_element;
typedef structmyarray;
typedef enumerror_status;
void paixu_array(myarray *arr)
else if((arr->array_head+k-1)->i==(arr->array_head+k)->i)
}} }
}void generate_row_first_index(myarray *arr)
while(karray_valid)
else if((arr->array_head+k)->i == i_temp)
else
k++; }}
error_status input_array(myarray *arr)
}//對輸入完成的稀疏矩陣元素進行排序,以行為序排序
paixu_array(arr);
} else
} if((arr->row_first_index = (int*)malloc(arr->array_row*sizeof(int)))!=null)
else
}void zhuanzhi_array(myarray *arr)
paixu_array(arr);
generate_row_first_index(arr);
}error_status multiple_array(myarray *a, myarray *b, myarray *ab)
if((ab_row_array = (array_element*)malloc(b->array_column*sizeof(array_element)))==null)
printf("key in mul_array's name:");
scanf("%s", ab->name);
for(k=0; karray_column; k++)
//無法**a*b後ab非零元數量,ab先分配足夠大的記憶體,如[0 0 1;0 0 1;0 0 1]*[0 0 0;0 0 0;1 1 1]=[1 1 1;1 1 1;1 1 1],如果ab非零元較多時,還必須將儲存形式轉變為一般矩陣順序儲存方式,以節省儲存空間
for(k=0, num=1; karray_valid; k++)
}for(kk=0; kkarray_column; kk++)
} //計算一行數值
for(kk=0; kkarray_valid; kk++)
} }for(kk=0; kkarray_column; kk++)
} paixu_array(ab);
}void output_array(myarray *arr)
else
}else
} printf("\n"); }}
int main(void)
稀疏矩陣轉置
輸出稀疏矩陣的轉置矩陣。行列均不大於20 第一行輸入兩個正整數n和m,分別表示矩陣的行數和列數,然後輸入矩陣三元組,最後輸入 0 0 0 表示結束輸入。轉置後的矩陣。include include define maxsize 100 typedef struct triple typedef st...
稀疏矩陣轉置矩陣
num 矩陣a中某列的非零元素的個數 cpot 初值表示矩陣a中某列第乙個非零元素在b中的位置,並有如下遞推 cpot 1 0 cpot col cpot col 1 num col 1 2 col nu end right.const int maxterm 100 struct sparsema...
稀疏矩陣的轉置(矩陣轉置和快速轉置)
實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...