加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

三元组顺序表 稀疏矩阵的三元组表示及 C语言 做成

发布时间:2022-07-10 04:07:32 所属栏目:语言 来源:互联网
导读:本节介绍稀疏矩阵的三元组顺序表压缩存储方式。 通过《矩阵的压缩存储》一节我们知道,稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标; C 语言中,三元组需要用结构体实现,如下所示: //三元组结构体 typ
  本节介绍稀疏矩阵的三元组顺序表压缩存储方式。
 
  通过《矩阵的压缩存储》一节我们知道,稀疏矩阵的压缩存储,至少需要存储以下信息:
  矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标;
  
  C 语言中,三元组需要用结构体实现,如下所示:
  //三元组结构体
  typedef struct {
      int i,j;//行标i,列标j
      int data;//元素值
  }triple;
  由于稀疏矩阵中非 0 元素有多个,因此需要建立 triple 数组存储各个元素的三元组。除此之外,考虑到还要存储矩阵的总行数和总列数,因此可以采用以下结构表示整个稀疏矩阵:
  #define number 20
  //矩阵的结构表示
  typedef struct {
      triple data[number];//存储该矩阵中所有非0元素的三元组
      int n,m,num;//n和m分别记录矩阵的行数和列数,num记录矩阵中所有的非0元素的个数
  }TSMatrix;
  可以看到,TSMatrix 是一个结构体,其包含一个三元组数组,以及用于存储矩阵总行数、总列数和非 0 元素个数的变量。
 
  假设采用 TSMatrix 结构体存储图 1 中的稀疏矩阵,其 C 语言实现代码应该为:
  #include<stdio.h>
  #define number 3
  typedef struct {
      int i,j;
      int data;
  }triple;
  typedef struct {
      triple data[number];
      int n,m,num;
  }TSMatrix;
  //输出存储的稀疏矩阵
  void display(TSMatrix M);
  int main() {
      TSMatrix M;
      M.m=3;
      M.n=3;
      M.num=3;
      M.data[0].i=1;
      M.data[0].j=1;
      M.data[0].data=1;
      M.data[1].i=2;
      M.data[1].j=3;
      M.data[1].data=5;
      M.data[2].i=3;
      M.data[2].j=1;
      M.data[2].data=3;
      display(M);
      return 0;
  }
  void display(TSMatrix M){
      for(int i=1;i<=M.n;i++){
          for(int j=1;j<=M.m;j++){
              int value =0;
              for(int k=0;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");
      }
  }
  输出结果为:
  1 0 0
  0 0 5
  3 0 0

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!