稀疏矩陣儲存 轉置 乘法運算

2021-06-22 06:52:17 字數 1655 閱讀 7917

使用順序儲存結構儲存稀疏矩陣,並實現轉置和乘法運算。

#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中每一列...