C语言 对称矩阵 压缩 实现
对称矩阵压缩的简单实现 (GCC编译)。
/**
* @brief C语言 对称矩阵 压缩 实现
* @author wid
* @date 2013-11-03
*
* @note 若代码存在 bug 或程序缺陷, 请留言反馈, 谢谢!
*/ #include <stdio.h>
#include <stdlib.h>
#include <assert.h> #define MAT_ROW 6
#define MAT_COL 6 typedef int ElemType; ///方法声明
ElemType *Compress( ElemType pArr2D[][MAT_COL] ); ///压缩二维对称矩阵
ElemType Value( ElemType *pComArr, int m, int n ); ///从压缩后的矩阵中取值 ///方法实现
/**
* @brief 压缩对称矩阵
*
* @param 待压缩的矩阵
*
* @return 返回压缩后线性表的指针
*/
ElemType *Compress( ElemType pArr2D[][MAT_COL] )
{
ElemType *pMat = (ElemType *)malloc( sizeof(ElemType) * ((MAT_COL * (MAT_COL + )) / ) ); ///映射到线性表中
int m = , n = , nLen = , nPos = ;
for( m = ; m < MAT_ROW; ++m )
{
for( n = ; n < nLen; ++n )
{
pMat[nPos] = pArr2D[m][n];
++nPos;
} ++nLen;
} return pMat;
} /**
* @brief 从压缩后得到的线性表中取值
*
* @param pComArr 指向存放压缩矩阵的线性表
* @param m 矩阵的第一维下标
* @param n 矩阵的第二维下标
*
* @return 返回该下标指向的元素值
*
* @note 元素位置由 0 计起
*/
ElemType Value( ElemType *pComArr, int m, int n )
{
///使用断言
assert( m >= && m < MAT_ROW && n >= && n < MAT_COL ); ///将0索引转化为1索引
++m;
++n; ///根据对称矩阵性质从压缩一维数组中取值
if( m >= n )
return pComArr[ (m * (m - )) / + n - ];
else
return pComArr[ (n * (n - )) / + m - ];
} ///测试
int main()
{
///对称矩阵 arrMat
ElemType arrMat[MAT_ROW][MAT_COL] = {
{, , , , , },
{, , , , , },
{, , , , , },
{, , , , , },
{, , , , , },
{, , , , , }
}; ///对矩阵 arrMat 进行压缩
ElemType *pCom = Compress( arrMat ); ///从压缩矩阵输出整个矩阵, 使用 0 索引
int m = , n = ;
for( m = ; m < MAT_ROW; ++m )
{
for( n = ; n < MAT_COL; ++n )
{
printf( "%d ", Value(pCom, m, n) );
} putchar( '\n' );
} return ;
}
运行测试:

若代码存在 bug 或程序缺陷, 请留言反馈, 谢谢。
C语言 对称矩阵 压缩 实现的更多相关文章
- C语言 稀疏矩阵 压缩 实现
稀疏矩阵压缩存储的C语言实现 (GCC编译). /** * @brief C语言 稀疏矩阵 压缩 实现 * @author wid * @date 2013-11-04 * * @note 若代码存在 ...
- java数据结构至对称矩阵压缩存储
刚刚刷java选择题,遇到的对称矩阵压缩存储问题,我们知道对称矩阵是aij=aji的矩阵,压缩存储可以采用一维数组和二维数组存储. 此处只讨论一维数组存储的形式,设数组下标从0开始,对称矩阵为n维矩阵 ...
- C语言Huffman压缩和解压
符号表结构体: struct node { // 字符串形式存储的Huffman编码 char code[MAX_CODE_LENGTH]; // 这个字符在文件中出现的次数 long count; ...
- C# .NET 使用第三方类库DotNetZip解压/压缩Zip rar文件
DotNetZip on CodePlex: http://dotnetzip.codeplex.com/ 详细的可以看源代码……总之感觉比SharpZipLib好用.而且DotNetZip支持VB, ...
- 在Spark程序中使用压缩
当大片连续区域进行数据存储并且存储区域中数据重复性高的状况下,数据适合进行压缩.数组或者对象序列化后的数据块可以考虑压缩.所以序列化后的数据可以压缩,使数据紧缩,减少空间开销. 1. Spark对压缩 ...
- C++ 记事本: 从历史说起
C 的简史 在谈论 C++ 的历史那么必须先得了解 C 的历史,那么我们先来看一段来自于 <<C专家编程>> 对 C 语言史前阶段的简单阐述: Ken Thompson(左), ...
- DotNet 资源大全中文版
https://blog.csdn.net/fhzh520/article/details/52637545 目录 算法与数据结构(Algorithms and Data structures) 应用 ...
- python3光学字符识别模块tesserocr与pytesseract
OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程,对应图形验证码来说,它们都是一些不规则的字符,这些字符是由 ...
- 数据结构与算法(C/C++版)【数组】
第五章<数组> 一.概念 根据数组中存储的数据元素之间的逻辑关系,可以将数组分为 : 一维数组.二维数组.….n维数组.n维数组中,维数 n 的判断依据是:根据数组中为确定元素所在位置使用 ...
随机推荐
- PHP echo 即时输出
header(“Content-type:text/html;charset=utf-8″); #设置执行时间不限时 set_time_limit(0); #清除并关闭缓冲,输出到浏览器之前使用这个函 ...
- Linux内核分析第六周学习总结:进程的描述和进程的创建
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的描述 ...
- 计算机病毒实践汇总二:bufferzone沙盘使用体验
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. 安装bufferzone及其简单使用 (1)安装BufferZone BufferZone的msi安装文件 ...
- g++与c++扩栈方法
g++: /* * Problem: * Author: SHJWUDP * Created Time: 2015/8/5 星期三 15:54:42 * File Name: tmp.cpp * St ...
- zookeeper client 常用操作
#获取权限(类似于登陆) addauth digest admin-user:admin-password #查看权限 getAcl /collections/meixin_product/state ...
- detection reading
1512.07729v1 G-CNN an Iterative Grid Based Object Detector,先基于空间金字塔生成很多矩形框,然后把这些矩形框作为regions,进行fast ...
- iOS的设备及分辨率、图片命名
iOS的设备及分辨率(iPhone竖屏/iPad横屏) 设备 分辨率 横宽比 iPhone 3GS.iPod Touch第三代 320 * 480 2 : 3 iPhone 4.iPod Touch第 ...
- 深入理解C语言的函数调用过程
本文主要从进程栈空间的层面复习一下C语言中函数调用的具体过程,以加深对一些基础知识的理解. 先看一个最简单的程序: 点击(此处)折叠或打开 /*test.c*/ #include stdio. ...
- server 2008 IIS 搭建PHP运行环境
本文以windows server 2008 r2 Enterprise作为操作系统,以IIS为web部署服务组件,配置PHP的服务器端执行环境,其中IIS版本为7.5,PHP版本为5.3. 注意:本 ...
- 关于Control flow
1.一个package包含一个control flow并且一个或多个data flow. (这个项目叫做 Integration services project,提供了三种不同类型的control ...