对称矩阵压缩的简单实现 (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. git常用操作

    批量删除以bran开头的本地分支 git branch |grep 'bran'|xargs git branch -d

  2. 2015年可用的TRACKER服务器大全

    udp://tracker.openbittorrent.com:80/announceudp://tracker.publicbt.com:80/announcehttp://pubt.net:27 ...

  3. Solr Zookeeper ACL权限配置

    首先注意:在配置ACL的时候,请关闭solr运行实例!!否则可能对集群造成不可恢复的损坏 开始: 1.修改solr.xml,在solrCloud节点添加,告诉solr要使用的provider: < ...

  4. clang format 自定义样式常用参数说明

    常用的格式设置: #如果为真(true),分析格式化过的文件中最常见的&和*的对齐方式.然后指针对齐仅作为回退 DerivePointerAlignment: false #缩进宽度 Inde ...

  5. iOS开发之AFNetworking 3.0.4使用-OC

      GET请求 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:URL parameters: ...

  6. Java 测试URL地址是否能正常连接

    public static int testWsdlConnection(String address) throws Exception { int status = 404; try { URL ...

  7. [转载] 散列表(Hash Table) 从理论到实用(下)

    转载自: 白话算法(6) 散列表(Hash Table) 从理论到实用(下) [澈丹,我想要个钻戒.][小北,等等吧,等我再修行两年,你把我烧了,舍利子比钻戒值钱.] ——自扯自蛋 无论开发一个程序还 ...

  8. 彻底卸载sublime txt

    最近彻底重装系统之后,安装sublime txt3, 自己设置了一些,总是觉得不是很对劲,想重新安装. 结果每次安装之后,总是有一些配置文件和卸载之前的是一样的,重复几次总是如此,于是网上搜资料,怎么 ...

  9. 【转】[caffe]深度学习之图像分类模型AlexNet解读

    [caffe]深度学习之图像分类模型AlexNet解读 原文地址:http://blog.csdn.net/sunbaigui/article/details/39938097   本文章已收录于: ...

  10. iOS多线程编程指南(二)线程管理

    当应用程序生成一个新的线程的时候,该线程变成应用程序进程空间内的一个实体.每个线程都拥有它自己的执行堆栈,由内核调度独立的运行时间片.一个线程可以和其他线程或其他进程通信,执行I/O操作,甚至执行任何 ...