对称矩阵压缩的简单实现 (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语言 对称矩阵 压缩 实现的更多相关文章

  1. C语言 稀疏矩阵 压缩 实现

    稀疏矩阵压缩存储的C语言实现 (GCC编译). /** * @brief C语言 稀疏矩阵 压缩 实现 * @author wid * @date 2013-11-04 * * @note 若代码存在 ...

  2. java数据结构至对称矩阵压缩存储

    刚刚刷java选择题,遇到的对称矩阵压缩存储问题,我们知道对称矩阵是aij=aji的矩阵,压缩存储可以采用一维数组和二维数组存储. 此处只讨论一维数组存储的形式,设数组下标从0开始,对称矩阵为n维矩阵 ...

  3. C语言Huffman压缩和解压

    符号表结构体: struct node { // 字符串形式存储的Huffman编码 char code[MAX_CODE_LENGTH]; // 这个字符在文件中出现的次数 long count; ...

  4. C# .NET 使用第三方类库DotNetZip解压/压缩Zip rar文件

    DotNetZip on CodePlex: http://dotnetzip.codeplex.com/ 详细的可以看源代码……总之感觉比SharpZipLib好用.而且DotNetZip支持VB, ...

  5. 在Spark程序中使用压缩

    当大片连续区域进行数据存储并且存储区域中数据重复性高的状况下,数据适合进行压缩.数组或者对象序列化后的数据块可以考虑压缩.所以序列化后的数据可以压缩,使数据紧缩,减少空间开销. 1. Spark对压缩 ...

  6. C++ 记事本: 从历史说起

    C 的简史 在谈论 C++ 的历史那么必须先得了解 C 的历史,那么我们先来看一段来自于 <<C专家编程>> 对 C 语言史前阶段的简单阐述: Ken Thompson(左), ...

  7. DotNet 资源大全中文版

    https://blog.csdn.net/fhzh520/article/details/52637545 目录 算法与数据结构(Algorithms and Data structures) 应用 ...

  8. python3光学字符识别模块tesserocr与pytesseract

    OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程,对应图形验证码来说,它们都是一些不规则的字符,这些字符是由 ...

  9. 数据结构与算法(C/C++版)【数组】

    第五章<数组> 一.概念 根据数组中存储的数据元素之间的逻辑关系,可以将数组分为 : 一维数组.二维数组.….n维数组.n维数组中,维数 n 的判断依据是:根据数组中为确定元素所在位置使用 ...

随机推荐

  1. KMeans的图像压缩

    # -*- coding: utf-8 -*- """ Created on Thu Aug 11 18:54:12 2016 @author: Administrato ...

  2. 云主机不能外网ssh连接,只能内网ssh连接的问题处理

    某台服务器外网无法ssh,内网可以ssh连接,ping值延时比较大 安装iftop查看流量 yum install -y iftop iftop界面含义如下 第一行:带宽显示 中间部分:外部连接列表, ...

  3. Linux_08------Linux的系统管理

    分钟,在随机延迟0-45分钟时间 * 使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件. * */

  4. zstu2016校赛圣杯战争

    这题不知道为什么就是T,简直有毒. 思想和巴比伦那题差不多. 话说,寻找一个区间内满足一个条件的最左(右)边的一个数,用线段树来写,应该是可以的,之前博客里大连网赛那题的线段树写法应该是有点小问题的. ...

  5. 校验日期函数的js

    /判断输入内容是否为空 function IsNull(){ var str = document.getElementById('str').value.trim(); if(str.length= ...

  6. HttpClient请求网络数据的Post请求

    new Thread(){            public void run() {                                try { //获得输入框内容          ...

  7. HashedWheelTimer 原理

    HashedWheelTimer 是根据 Hashed and Hierarchical Timing Wheels: Data Structuresfor the Efficient Impleme ...

  8. android BroadcastReceiver

    AndroidManifast.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...

  9. 管理权限<八>

    权限:如果用户要访问其它方案的对象,则必须为其授予对象的权限.为权限  权限 权限是指执行特定类型 sql 命令或是访问其它方案对象的权利,包括系统权限和对象权限两种. 系统权限  系统权限介绍 ...

  10. jquery 让select元素中的某个option被选中

    jquery 操作select 取值,设置选中值 博客分类: javaScript selecttextvalue取值设置选中值 比如 <select class="type" ...