考研复试准备-c语言-数据结构-矩阵-稀疏矩阵的表示-三元组

文章目录

  • 一、定义
  • 二、建立稀疏矩阵的三元组
  • 三、通过三元组打印稀疏矩阵


一、定义

三元组0行0列表示稀疏矩阵中总的非零元素个数,0行1列表示
稀疏矩阵总行数,0行2列表示稀疏矩阵总列数。除0行外的每一
行(按行优先存储),0列表示非零元素值,1列表示非零元素值
的行号,2列表示非零元素值的列号。
//定义一
float B[MaxSize][3];//MaxSize>=非零元素数+1,且为常量
//定义二
typedef struct{
  int data;//非零元素值
  int r;//非零元素行号
  int c;//非零元素列号
}Trimat;

Trimat tri[MaxSize];//MaxSize>=非零元素数+1,且为常量

二、建立稀疏矩阵的三元组

代码如下(示例):

#define MaxSize 5
//建立稀疏矩阵A的三元组B
void CreateTrimat(float A[][MaxSize], int m, int n, float B[][3]){
	int k = 1;
	//遍历矩阵A
	for (int i = 0; i < m; i++){
		for (int j = 0; j < n; j++){
			if (A[i][j] != 0){//若不为0
				B[k][0] = A[i][j];//0列放非零元素值
				B[k][1] = i;//1列放非零元素所在行号
				B[k][2] = j;//2列放非零元素所在列号
				k++;
			}
		}
	}
	B[0][0] = k - 1;//矩阵A中的总的非零元素数
	B[0][1] = m;//总行数
	B[0][2] = n;//总列数
	
}

三、通过三元组打印稀疏矩阵

代码如下(示例):

//通过三元组B打印矩阵A
void print(float B[][3]){
	int k = 1;
	for (int i = 0; i < B[0][1]; i++){//B[0][1]为总行数
		for (int j = 0; j < B[0][2]; j++){//B[0][2]为总列数
			if ((int)B[k][1] == i && (int)B[k][2] == j){//如果A[i][j]在三元组中,输出B[k][0]
				if (j == B[0][2] - 1){//如果A[i][j]为列号为4的元素换行
					printf("%f\n", B[k][0]);
				}
				else{//如果A[i][j]为列号为4的元素换行
					printf("%f  ", B[k][0]);

				}
				k++;
			}
			else{//如果A[i][j]没在三元组中,说明A[i][j]==0
				if (j == B[0][2] - 1){//如果A[i][j]为列号为4的元素换行
					printf("0\n");
				}
				else{//如果A[i][j]为列号为4的元素换行
					printf("0  ");

				}
			}
		}
	}
}


你可能感兴趣的:(数据结构,矩阵,c语言)