for(i=1;i<=m.行;++i)
for(j=1;j<=n.列;++j)
光是q[i][j]+=m[i][k]*n[k][j];這一句就要m的行數*n的列數再乘以m的列數這樣乙個複雜度,所以我們有了以下的演算法,在快速相乘中我會寫比較多的注釋方便大家理解,具體詳細的說明請各位參考嚴的資料結構,下面有三個檔案,乙個是matrix.h,乙個是matrix.c,最後乙個是main.c
//matrix.h
#ifndef matrix_h
#define matrix_h
#include
#include
//#include
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#define maxsize 7
#define maxrc 7
#define row 4
#define col 5
#define format "%3d"
#define turnline printf("/n/n")
typedef int elemtype;
typedef int status;
typedef struct
triple;
typedef struct
matrix;
void test();
status creatematrix(matrix *);//建立乙個矩陣,這裡留成空函式讓大家自由發揮(因為這不是討論的重點),下面自會有測試資料。
void printmatrix(matrix m,int size);//列印矩陣
status findpostion(matrix *);//查詢矩陣中非零元的位置
status fasttransmatrix(matrix ,matrix *);//快速倒置矩陣
status multmatrix(matrix ,matrix ,matrix *);//實現兩個矩陣的快速相乘
void implement();//用於快速倒置矩陣的測試資料
void another_implement();//用於快速矩陣相乘的測試資料
#endif
//matrix.c
#include "matrix.h"
void test()
status creatematrix(matrix *m)
void printmatrix(matrix m,int size)
status fasttransmatrix(matrix m,matrix *t)
for(t=1;t<=m.tu;++t)
cpot[1]=1;
for(col=2;col<=m.nu;++col)
for(p=1;p<=m.tu;++p)
}return ok;
}status findpostion(matrix *m)
status multmatrix(matrix m,matrix n,matrix *q)
#endif
int mrow,nrow,pm,pn,*temp=null,t,tp,qcol,i;
int row;
if(m.nu!=n.mu) return error;
q->mu=m.mu;
q->nu=n.nu;
q->tu=0;
if(m.tu*n.tu!=0)}}
}return ok;
}void implement()//自己虛擬矩陣非零元素作測試
void antother_implement()
資料結構 稀疏矩陣的快速轉置
使用兩種方法將稀疏矩陣快速轉置 include includeusing namespace std templatestruct triple 三元組 templateclass sparsematrix sparsematrix size t rowsize,size t colsize,t i...
稀疏矩陣轉置 資料結構
description 輸出稀疏矩陣的轉置矩陣。行列均不大於20 input 第一行輸入兩個正整數n和m,分別表示矩陣的行數和列數,然後輸入矩陣三元組,最後輸入 0 0 0 表示結束輸入。output 轉置後的矩陣。sample input 4 41 1 1 2 1 2 3 2 3 0 0 0 sa...
資料結構 稀疏矩陣轉置
我們來看看這個矩陣,五行五列,可以包含二十五個元素,但是此矩陣只有七個元素。但是我們在存放資料的時候分配了二十五塊int單元。這樣是不是有點太 浪費了。如果我們只儲存這七個元素我想會節省一部分記憶體空間。但是如果我們只儲存矩陣中的元素還是不行的,因為只有元素我們就無法還原矩陣,我們還需要此 元素的行...