下面实现的特殊矩阵存储方法

三元组顺序存储方法&转置

#include

#include

#define MAXSIZE 12500

// 三元组顺序表示稀疏矩阵

// written at 2018-6-1 23:37:22

typedef int ElemType;

typedef struct{

int i; // row

int j; // column

ElemType e;

}tripple;

typedef struct{

tripple data[MAXSIZE+1]; // 0 not use

int mu, nu, tu; // 行,列,非零元总数

}tsMatrix;

tripple init_tribble(int i, int j, ElemType e){

tripple temp;

temp.i = i;

temp.j = j;

temp.e = e;

return temp;

}

void print_sparse_matrix(tsMatrix temp){

printf("**********START************\n");

printf("i\tj\tv\t\n");

for (int i=1; i<=temp.tu; i++){

printf("%d\t%d\t%d\t\n",temp.data[i].i,temp.data[i].j,temp.data[i].e);

}

printf("***********END*************\n");

}

void transposeMatrix(tsMatrix m, tsMatrix *t){

// 按列转置矩阵

t->mu = m.nu; // step 1

t->nu = m.mu; // step 1

t->tu = m.tu;

// step 2 & step 3

if(t->tu){

int q=1;

for (int col=1;col<=m.nu;++col){

for (int p=1; p<=m.tu;++p){

if (m.data[p].j == col){

t->data[q].i = m.data[p].j;

t->data[q].j = m.data[p].i;

t->data[q].e = m.data[p].e;

q++;

}

}

}

}

}

void quickTranspose(tsMatrix m, tsMatrix *t){

// 通过预先确认M中每一列的第一个非零元在b.data中的应有的位置,则可以省时间

t->mu = m.nu;

t->nu = m.mu;

t->tu = m.tu;

if (t->tu){

int num[m.nu + 1]; // 0 not use

for (int col=1; col<=m.nu; col++) num[col] = 0; // 初始化num数组

for (int temp=1; temp<=m.tu; temp++) ++num[m.data[temp].j];

int cpot[m.nu + 1]; // 0 not use

cpot[1] = 1; // 第一列中第一个元素肯定是在第一个位置

// 求第col列中第一个非零元在b.data中的序号

for (int col=2; col<=m.nu;++col){

cpot[col]=cpot[col-1]+num[col-1];

}

for (int p=1;p<=m.tu;++p){

int col = m.data[p].j;

int q=cpot[col];

t->data[q].i = m.data[p].j;

t->data[q].j = m.data[p].i;

t->data[q].e = m.data[p].e;

++cpot[col];

}

}

}

void main(){

// init the martix and let the matrix not empty

tsMatrix temp;

temp.data[1] = init_tribble(1, 2, 12);

temp.data[2] = init_tribble(1, 3, 9);

temp.data[3] = init_tribble(3, 1, -3);

temp.data[4] = init_tribble(3, 6, 14);

temp.data[5] = init_tribble(4, 3, 24);

temp.data[6] = init_tribble(5, 2, 18);

temp.data[7] = init_tribble(6, 1, 15);

temp.data[8] = init_tribble(6, 4, -7);

// 课本97页中的M矩阵

temp.mu = 6;

temp.nu = 7;

temp.tu = 8;

print_sparse_matrix(temp);

tsMatrix t;

tsMatrix t2;

transposeMatrix(temp, &t2);

quickTranspose(temp, &t);

printf("\t按列转置\t\n");

print_sparse_matrix(t2);

printf("\t快速转置\t\n");

print_sparse_matrix(t);

}

输出结果如下:

**********START************

i j v

1 2 12

1 3 9

3 1 -3

3 6 14

4 3 24

5 2 18

6 1 15

6 4 -7

***********END*************

按列转置

**********START************

i j v

1 3 -3

1 6 15

2 1 12

2 5 18

3 1 9

3 4 24

4 6 -7

6 3 14

***********END*************

快速转置

**********START************

i j v

1 3 -3

1 6 15

2 1 12

2 5 18

3 1 9

3 4 24

4 6 -7

6 3 14

***********END*************

行逻辑链接的顺序表

#include

#include

#define MAXSIZE 12500

/*

行逻辑连接的顺序表

为了便于随机存取任意一行的非零元引入的第二种表示方法

written at 2018-6-2 18:26:30

*/

typedef int ElemType;

typedef struct{

int i; // row

int j; // column

ElemType e;

}tripple;

typedef struct RLSMatrix{

tripple data[MAXSIZE+1];

int mu, nu, tu;

int rops[MAXRC + 1]; // 各行第一个非零元的位置表

}RLSMatrix;

c语言矩阵存储,C语言实现特殊矩阵存储相关推荐

  1. c++矩阵转置_C语言:数据结构-稀疏矩阵的压缩存储

    (1)稀疏矩阵的特点 在一个m×n的矩阵中,设矩阵中有i个元素不为零,并令△=i/(m×n),称△为稀疏因子.通常当△≤0.05时.认为该矩阵为稀疏矩阵. 对这类矩阵实现压缩存储的基本思路是只需要存储 ...

  2. 【数字图像处理】BMP图片的读取显示存储(C语言实现)

    (一)背景介绍 这段时间接到了一个新活,是关于图像处理的一个探地摄像头的项目.所以也差不多是时候开始学习一下数字图像处理的知识了.本来我们的方案是直接移植opencv,编译一下以后其他就基本啥都不用管 ...

  3. 独立按键和矩阵按键c语言,第八章 独立按键和矩阵按键

    我们和单片机之间进行信息交互,主要包含两大类,输入设备和输出设备.前边讲的LED小灯.数码管.点阵都是输出设备,这节课我们学习一下最常用的输入设备--按键.在本节课的学习过程中我们还会穿插介绍一点硬件 ...

  4. 独立按键和矩阵按键c语言,单片机独立按键与矩阵按键原理图

    当前位置:电工之家 > 电工知识 > 单片机 > 正文 单片机独立按键与矩阵按键原理图 时间:2017-02-22 12:40 来源:电工之家 单片机独立按键与矩阵按键原理图 独立按 ...

  5. ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7

    这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...

  6. C语言——深度剖析数据在内存中的存储

    大家好!我是保护小周ღ,本期为大家带来的是深度剖析数据在内存中的存储,不知道,大家学了这么久C语言,有没有想过一个问题,我们在程序设计中的数据是怎么在计算机中存储的?我们都知道 一个整型数据 int ...

  7. c语言程序设计对角矩阵,从键盘输入一个4*4矩阵,并求这个4*4矩阵主对角线元素之和,并输出.球C语言程式设计...

    从键盘输入一个4*4矩阵,并求这个4*4矩阵主对角线元素之和,并输出.球C语言程式设计以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起 ...

  8. geo读取表达矩阵 RNA-seq R语言部分(表达矩阵合并及id转换)

    geo读取表达矩阵 RNA-seq R语言 方法一:1.从geo页面直接下载表达矩阵,然后通过r读取表达矩阵 2.利用getgeo函数读取表达矩阵 3.利用geo自带的geo2r,调整p值为1,获取探 ...

  9. 【C语言】浮点型数据在内存中的存储方式

    目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...

  10. C语言——数据结构之广义表(概念及其存储结构)

    前言 本节我们来说说C语言中的广义表.主要介绍广义表的概念定义,并说明其存储结构,算法中将使用到递归思想. 广义表是线性表的一种推广,在数据结构中有广泛应用. 一.广义表的概念 1.广义表的概念 (1 ...

最新文章

  1. keepalived+MHA实现mysql主从高可用集群
  2. python方法测试_python 测试常用小方法
  3. Silverlight+WCF 新手实例 象棋 棋子(三)
  4. (转)编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
  5. Python资源大全 屌炸Python库
  6. 18、监听器/国际化
  7. 大熊君大话NodeJS之------Net模块
  8. 第二阶段团队冲刺(六)
  9. 基于python的在线考试系统-基于Django的在线考试系统
  10. 除了待办清单,用 Things 还能做什么?
  11. JAVA中的文件及目录处理类--File
  12. 人工智能深度学习数据集
  13. APP响应时间和响应速度测试
  14. 以DMA方式开启DAC输出正弦波
  15. 铜仁学院官网计算机二级报名,贵州铜仁学院2015年9月全国计算机等级考试报名通知...
  16. 策略路由(Policy-Based-Route)
  17. 盘古石考核取证复现检材1(??)
  18. 千道Java面试真题整理系列:MySQL灵魂五十问,在遇面试也不怕.
  19. 这才是程序员该用的搜索引擎?
  20. 制作黑苹果安装U盘(Clover+OC+PE)三引导

热门文章

  1. 爬虫笔记9实例股票数据
  2. php常用操作数组函数,PHP自带的几个实用的数组函数
  3. SpringMVC-注解@RequestParam
  4. IDEA出现Error during artifact deployment. See server log for details.
  5. Problem for Nazar
  6. 人类史上最大最好的希望事件
  7. python实现气象数据分析统计服_Python数据分析实战:降雨量统计分析报告分析
  8. 计算机网络(谢希仁第八版)第四章:网络层
  9. Docker Gogs
  10. 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结