c语言矩阵存储,C语言实现特殊矩阵存储
下面实现的特殊矩阵存储方法
三元组顺序存储方法&转置
#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语言实现特殊矩阵存储相关推荐
- c++矩阵转置_C语言:数据结构-稀疏矩阵的压缩存储
(1)稀疏矩阵的特点 在一个m×n的矩阵中,设矩阵中有i个元素不为零,并令△=i/(m×n),称△为稀疏因子.通常当△≤0.05时.认为该矩阵为稀疏矩阵. 对这类矩阵实现压缩存储的基本思路是只需要存储 ...
- 【数字图像处理】BMP图片的读取显示存储(C语言实现)
(一)背景介绍 这段时间接到了一个新活,是关于图像处理的一个探地摄像头的项目.所以也差不多是时候开始学习一下数字图像处理的知识了.本来我们的方案是直接移植opencv,编译一下以后其他就基本啥都不用管 ...
- 独立按键和矩阵按键c语言,第八章 独立按键和矩阵按键
我们和单片机之间进行信息交互,主要包含两大类,输入设备和输出设备.前边讲的LED小灯.数码管.点阵都是输出设备,这节课我们学习一下最常用的输入设备--按键.在本节课的学习过程中我们还会穿插介绍一点硬件 ...
- 独立按键和矩阵按键c语言,单片机独立按键与矩阵按键原理图
当前位置:电工之家 > 电工知识 > 单片机 > 正文 单片机独立按键与矩阵按键原理图 时间:2017-02-22 12:40 来源:电工之家 单片机独立按键与矩阵按键原理图 独立按 ...
- ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7
这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...
- C语言——深度剖析数据在内存中的存储
大家好!我是保护小周ღ,本期为大家带来的是深度剖析数据在内存中的存储,不知道,大家学了这么久C语言,有没有想过一个问题,我们在程序设计中的数据是怎么在计算机中存储的?我们都知道 一个整型数据 int ...
- c语言程序设计对角矩阵,从键盘输入一个4*4矩阵,并求这个4*4矩阵主对角线元素之和,并输出.球C语言程式设计...
从键盘输入一个4*4矩阵,并求这个4*4矩阵主对角线元素之和,并输出.球C语言程式设计以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起 ...
- geo读取表达矩阵 RNA-seq R语言部分(表达矩阵合并及id转换)
geo读取表达矩阵 RNA-seq R语言 方法一:1.从geo页面直接下载表达矩阵,然后通过r读取表达矩阵 2.利用getgeo函数读取表达矩阵 3.利用geo自带的geo2r,调整p值为1,获取探 ...
- 【C语言】浮点型数据在内存中的存储方式
目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...
- C语言——数据结构之广义表(概念及其存储结构)
前言 本节我们来说说C语言中的广义表.主要介绍广义表的概念定义,并说明其存储结构,算法中将使用到递归思想. 广义表是线性表的一种推广,在数据结构中有广泛应用. 一.广义表的概念 1.广义表的概念 (1 ...
最新文章
- keepalived+MHA实现mysql主从高可用集群
- python方法测试_python 测试常用小方法
- Silverlight+WCF 新手实例 象棋 棋子(三)
- (转)编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- Python资源大全 屌炸Python库
- 18、监听器/国际化
- 大熊君大话NodeJS之------Net模块
- 第二阶段团队冲刺(六)
- 基于python的在线考试系统-基于Django的在线考试系统
- 除了待办清单,用 Things 还能做什么?
- JAVA中的文件及目录处理类--File
- 人工智能深度学习数据集
- APP响应时间和响应速度测试
- 以DMA方式开启DAC输出正弦波
- 铜仁学院官网计算机二级报名,贵州铜仁学院2015年9月全国计算机等级考试报名通知...
- 策略路由(Policy-Based-Route)
- 盘古石考核取证复现检材1(??)
- 千道Java面试真题整理系列:MySQL灵魂五十问,在遇面试也不怕.
- 这才是程序员该用的搜索引擎?
- 制作黑苹果安装U盘(Clover+OC+PE)三引导
热门文章
- 爬虫笔记9实例股票数据
- php常用操作数组函数,PHP自带的几个实用的数组函数
- SpringMVC-注解@RequestParam
- IDEA出现Error during artifact deployment. See server log for details.
- Problem for Nazar
- 人类史上最大最好的希望事件
- python实现气象数据分析统计服_Python数据分析实战:降雨量统计分析报告分析
- 计算机网络(谢希仁第八版)第四章:网络层
- Docker Gogs
- 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结