下三角矩阵如图, 三角形区域首先被存储,框型区域最后被存储于数组的最后一个元素中。

代码及测试结果:

#include<stdio.h>
#include<stdlib.h>#define N 4    //N为三角矩阵的阶数
//先把矩阵的下三角区元素存了
void storageLowerTriangle(int array[] , int i, int j , int e){array[i*(i-1)/2+j-1] = e;
}
//再存储常数C
void storageConstant(int array[],int constant){array[N*(N+1)/2]=constant;
}//三角矩阵的元素获取
int getValue(int array[],int i,int j) {if(i>=j){//访问下三角区元素return array[i*(i-1)/2+j-1];}else{//访问上三角区的常数return array[N*(N+1)/2];   }
}int main(int argc, char *argv[])
{//用二维数组模拟一个对称矩阵.  int matrix[N][N] = {{9,888,888,888},{1,6,888,888},{3,8,19,888},{5,17,11,12} };//+1是存储主对角线的上三角区域的常数C int *array =(int *)malloc(sizeof(int)*(N*(N+1)/2+1));//遍历矩阵只存储下三角元素for(int i = 0;i<N;i++){for(int j = 0;j<N;j++){//矩阵的下三角区域,存储 if(i>=j){//这里 i+1 j+1 是矩阵下标是从1开始,而不是0.    matrix[0][0] 其实是矩阵中的a11. storageLowerTriangle(array,(i+1),(j+1),matrix[i][j]); }}}//存储三角矩阵的常数CstorageConstant(array,matrix[0][1]);//打印array数组中存储的元素for(int i = 0;i<N*(N+1)/2+1;i++){printf("array数组中的元素是%d\n",*(array+i));} //访问矩阵的第三行、第二个元素int value = getValue(array,3,2);printf("矩阵中的第三行第二个元素是%d\n",value);//访问矩阵的第二行、第四个元素 int value2 = getValue(array,2,4); printf("矩阵中的第二行第四个元素是%d\n",value2); return 0;
}

上三角矩阵如图, 三角形区域先被存储,框型区域后被存储。

代码及测试结果:

#include<stdio.h>
#include<stdlib.h>#define N 4    //N为三角矩阵的阶数
//先把矩阵的上三角矩阵元素存了
void storageLowerTriangle(int array[] , int i, int j , int e){array[(2*N-i+2)*(i-1)/2+(j-i)] = e;
}
//再存储常数C
void storageConstant(int array[],int constant){array[N*(N+1)/2]=constant;
}//三角矩阵的元素获取
int getValue(int array[],int i,int j) {if(i<=j){//访问上三角区元素return array[(2*N-i+2)*(i-1)/2+(j-i)];}else{//访问下三角区的常数return array[N*(N+1)/2];    }
}int main(int argc, char *argv[])
{//用二维数组模拟一个对称矩阵.  int matrix[N][N] = {{9,1,3,5},{888,6,8,17},{888,888,19,11},{888,888,888,12} };//+1是存储主对角线的上三角区域的常数C int *array =(int *)malloc(sizeof(int)*(N*(N+1)/2+1));//遍历矩阵只存储上三角元素for(int i = 0;i<N;i++){for(int j = 0;j<N;j++){//矩阵的上三角区域,存储 if(i<=j){//这里 i+1 j+1 是矩阵下标是从1开始,而不是0.    matrix[0][0] 其实是矩阵中的a11. storageLowerTriangle(array,(i+1),(j+1),matrix[i][j]); }}}//存储三角矩阵的常数CstorageConstant(array,matrix[1][0]);//打印array数组中存储的元素for(int i = 0;i<N*(N+1)/2+1;i++){printf("array数组中的元素是%d\n",*(array+i));} //访问矩阵的第三行、第二个元素int value = getValue(array,3,2);printf("矩阵中的第三行第二个元素是%d\n",value);//访问矩阵的第二行、第四个元素 int value2 = getValue(array,2,4); printf("矩阵中的第二行第四个元素是%d\n",value2); return 0;
}

按上三角矩阵和按下三角矩阵存储的不同就是, 存取时的表达式不同,其余代码大多数都雷同。

所以说矩阵的存储:关键是搞清楚矩阵下标和数组下标的映射关系。

三角矩阵的存储和获取(C++版)相关推荐

  1. [数据结构-严蔚敏版]P95矩阵压缩-特殊矩阵的存储(对称矩阵,三角矩阵)

    对称矩阵的存储: 代码如下: #include <iostream> using namespace std;int main() {int n;cin >> n;int *a ...

  2. 三角矩阵上三角列优先压缩存储---加法、减法、乘法、转置、秩、行列式值、伴随矩阵、逆

    三角矩阵上三角列优先压缩存储: 我们以图4.9中的矩阵A矩阵为例,针对A上三角部分,采用以列为主序存储至一个一维数组B内,按照三角矩阵上三角元素构成可知,该部分有n(n+1)/2个元素,因为下三角中的 ...

  3. 数据结构--三角矩阵的压缩存储

    三角矩阵 三角矩阵的常用压缩方式有两种: 线性压缩 使用三角形的二维数组压缩 线性压缩存储三角矩阵 下三角矩阵: 上三角矩阵: 以下三角矩阵的线性压缩存储为例,进行实现: package pers.z ...

  4. 特殊矩阵的压缩存储(对称矩阵,三角矩阵,对角矩阵,稀疏矩阵的顺序,链序存储,十字链表的建立)

    特殊矩阵的压缩存储 压缩存储的定义: 若多个数据元素的值都相同,则只分配一个元素值的存储空间,且 零元素不占存储空间. 能够压缩的一些矩阵: 一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等 ...

  5. 上三角矩阵的乘法C语言,【数据结构】——基于压缩存储的半三角矩阵乘法运算的实现...

    题目要求 已知两个n×n阶方阵A和B的上半三角(不含主对角线上元素)元素全为0,计算并输出这两个矩阵的乘积C=A×B.根据矩阵乘法性质可知,C矩阵的上半角三角元素(不含主对角线上元素)必然全为0. 要 ...

  6. 基于压缩存储的半三角矩阵乘法运算的实现

    题目: 已知两个n阶下半三角矩阵的乘积仍为n阶下半三角矩阵.编程输入两个n阶下半三角矩阵,输出这两个矩阵的乘积.要求n阶下半三角矩阵采用一维数组压缩存储(即只存储下半三角). 程序先从键盘(或字符文件 ...

  7. 数据结构-拓展突破-特殊矩阵(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)的压缩存储)

    文章目录 1. 对称矩阵 2. 三角矩阵 3. 三对角矩阵 4. 稀疏矩阵 1. 对称矩阵 对称矩阵的定义: 若n阶方阵中任意一个元素a,都有a(i,j)=a(j,i)则该矩阵为对称矩阵 也就是说对称 ...

  8. 单链表(线性表的链式存储)---C语言版

    目录 单链表(线性表的链式存储)---C语言版 一.相关说明 二.单链表的定义 三.单链表上具体操作的实现和时间复杂度 1.初始化表.构造一个空表. 2.根据数组创建单链表 3.求表长 4.插入操作. ...

  9. 一维数组二维数组对称矩阵三角矩阵三对角矩阵地址的计算

    一维数组的地址计算 设每个元素的大小是size,首元素的地址是a[1],则 a[i] = a[1] + (i-1)*size 若首元素的地址是a[0] 则a[i] = a[0] + i*size 二维 ...

最新文章

  1. python 打包 .app 运行 控制台窗口_Python打包工具
  2. matlab 删除路径_MATLAB自动管理文件
  3. SOA:A note on RPC
  4. js调整数组某些元素到指定位置顺序_如何将一个 JavaScript 数组打乱顺序?
  5. Flutter学习记录(四、Flutter项目学习列表listView)
  6. anaconda3虚拟环境离线迁移到服务器
  7. 静态工厂方法与传统构造方法
  8. 解析JVM内存区域组成
  9. 【ABAP系列】SAP ABAP的事件执行顺序
  10. 聊聊索引失效的10种场景,巨坑
  11. 微信小程序调用百度云H5人脸识别
  12. Kali Linux2021安装搜狗输入法
  13. 操作系统--进程和线程
  14. 程序读取斗罗大陆热点词汇热度
  15. asa 防火墙拦截了https_Cisco ASA防火墙的URL过滤控制
  16. Netflix时代之后Spring Cloud微服务的未来
  17. CSS3-3D动画制作旋转立方体
  18. 在vscode上编写jsp_使用顶级 VSCode 扩展来加快开发 JavaScript
  19. telnet协议的Wireshark抓包分析
  20. 可截断素数(Truncatable primes)

热门文章

  1. MarchingCubes算法提取等值面的基本原理
  2. weui实例:城市便民自行车查询
  3. 离开,是为了新的开始
  4. CarSim仿真快速入门(三)
  5. 机器人基础之姿态矩阵
  6. SQL Server 2008 简体中文正式版下载地址(附序列号)
  7. 什么是IOC(控制反转)、DI(依赖注入)
  8. linux 内核 课程,Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频教 ......
  9. 电脑公司 GHOST WIN10 X64 装机专业版 V2018.04(64位)
  10. Code Clinic: Clojure 代码诊所:Clojure Lynda课程中文字幕