0
点赞
收藏
分享

微信扫一扫

(数据结构)C语言稀疏矩阵存储之行逻辑链接 —— 2022/3/26

行逻辑链接

—— 头文件

#include <stdio.h>
#define number 5  // 代表有四个非零元素 
#define NUM 4  // 代表有三行 

结构体声明三元组和稀疏矩阵

// 结构体声明三元组节点 
typedef struct {
    int i, j;
    int data;
} triple;

// 结构体声明稀疏矩阵节点 
typedef struct {
    triple data[number];
    int rpos[NUM];
    int n, m, num;
} TSMatrix;

构造增添三元组元素的函数

int index = 1; // 全局变量(记录三元组的索引值) 

// 填充三元组内容
void appendElement(TSMatrix *thisM, int i, int j, int data){
	thisM->data[index].i = i;
	thisM->data[index].j = j;
	thisM->data[index].data = data;
	index++; 
} 

构造展示稀疏矩阵的函数

// 输出存储的稀疏矩阵
void display(TSMatrix M){
    for(int i = 1; i <= M.m; i++){  // 行 
        for(int j = 1;j <= M.n; j++){  // 列 
            int value = 0;
            // 位于第一行和第二行的元素 
            if(i+1 <= M.m){
            	for(int k = M.rpos[i]; k < M.rpos[i+1]; k++){  // 判断第一行元素时只比较三元组前二个位置 
	                if(i == M.data[k].i && j == M.data[k].j){  // 证明找到非零元素 
	                    printf("%d ", M.data[k].data);  // 输出非零元素 
	                    value = 1;
	                    break;
	                }
            	}
	            if(value == 0){ 
	                printf("0 ");
	            } 
			}else{
				for(int k = M.rpos[i]; k <= M.num; k++){
	                if(i == M.data[k].i && j == M.data[k].j){  // 证明找到非零元素 
	                    printf("%d ", M.data[k].data);  // 输出非零元素 
	                    value = 1;
	                    break;
	                }
            	}
	            if(value == 0){ 
	                printf("0 ");
	            } 
			} 
        }
        printf("\n");
    }
}

—— 主函数

int main() {
    TSMatrix M;
    M.m = 3;  // 三行 
    M.n = 4;  // 四列  
    M.num = 4;  // 三个非零元素 
    M.rpos[1] = 1;  // 第一行的第一个非零元素位于三元组的第 1个位置 
	M.rpos[2] = 3;  // 第二行的第一个非零元素位于三元组的第 3个位置 
    M.rpos[3] = 4;  // 第三行的第一个非零元素位于三元组的第 4个位置 
    
	// 插入三元组 
	appendElement(&M, 1, 2, 3);
	appendElement(&M, 1, 4, 5);
	appendElement(&M, 2, 3, 1);
	appendElement(&M, 3, 1, 2);
	
	// 展示三元组 
    display(M);
    // outputs: 0 3 0 5
	//			0 0 1 0
	//			2 0 0 0
    return 0;
}
举报

相关推荐

0 条评论