在实际应用中,我们经常碰到这样一类矩阵,它们的非零元素很少,而且分布没有规律,我们称之为稀疏矩阵。很显然,若用二维数组存储稀疏矩阵,将浪费大量的时间和空间。因此我们对稀疏矩阵一般采取压缩存储的方法,即只存储其非零元素。常用的数据结构有三元组顺序表 和十字链表。 我们先来看三元组顺序表。//------稀疏矩阵的三元组顺序表存储表示-------------------#define MAXSIZE 1000 //假设非零元素的个数最多为1000个 typedef struct{ int x, y; //该非零元素的行下标和列下标 ElemType e; //该非零元素的值 } Triple;typedef struct{ Triple data[MAXSIZE+1];//非零元素三元组顺序表data[0]未用 int mu, nu, tu; //矩阵的行数,列数和非零元素的个数 } TSMatrix;在此,data域中表示非零元素的三元组是以行序为主序顺序排列的,这为我们的某些计算将带来方便。创建一个三元组TSMatrix CreateTriple(int m, int n) //构造一个三元组顺序表存储矩阵{ TSMatrix T; int i=0; puts("请按行序为主序依次输入矩阵的非零元素的行号,列号和元素值,每行输入一个元素的信息:"); printf("注意行号不能超过%d,列号不能超过%d\n", m, n); do { i++; scanf("%d%d%d", &T.data[i].x, &T.data[i].y, &T.data[i].e); fflush(stdin); } while(T.data[i].x > 0 && T.data[i].x <= m && T.data[i].y > 0 && T.data[i].y <= n) ; T.mu = m; T.nu = n; T.tu = i; return T;}二维数组存储稀疏矩阵和三元组顺序表的相互转换 TSMatrix ArrayToTriple(const int A[][N], int m, int n)//二维数组转换为三元组顺序表 { TSMatrix T; int i, j, k; k = 1; for(i=0; i

评论