当前位置: 首页 > news >正文

【2025年软考中级】第三章数据结构3.4 数组与矩阵

文章目录

  • 数组与矩阵
    • 数组
      • 数组的基本概念
      • 数组的存储与地址计算
        • 行优先存储
        • 列优先存储
        • 地址计算图示
    • 矩阵
      • 矩阵的基本概念
      • 稀疏矩阵的存储
        • 三元组表(Triplet Table)
        • 十字链表(Orthogonal List)
      • 特殊矩阵的压缩存储

数组与矩阵

数组

数组的基本概念

数组是定长线性表在维度上的扩展,本质是线性表的嵌套结构(线性表中的元素本身又是一个线性表)。其核心特性包括:

  • 同构性:所有数据元素类型相同、结构一致(如二维数组int arr[3][4]中每个元素均为整数)。
  • 下标约束:每个维度的下标有明确上下界,且按顺序排列(通常从0开始)。
  • 操作限制:数组元素数目固定,一般不支持插入/删除操作,更适合查询和修改,因此优先采用顺序存储结构

数组的存储与地址计算

数组采用顺序存储时,可通过下标快速计算元素地址。以二维数组为例,假设每个元素占用len字节,起始地址为a,存储方式分为:

行优先存储

按行依次存储每一行元素,地址计算公式(从0开始编号):

a d d r ( i , j ) = a + ( i × n + j ) × l e n addr(i,j) = a + (i × n + j) × len addr(i,j)=a+(i×n+j)×len
n为列数,i为行号,j为列号)

列优先存储

按列依次存储每一列元素,地址计算公式:
a d d r ( i , j ) = a + ( j × m + i ) × l e n addr(i,j) = a + (j × m + i) × len addr(i,j)=a+(j×m+i)×len
m为行数,i为行号,j为列号)

地址计算图示

矩阵

矩阵的基本概念

矩阵是二维数组的应用形式,由mn列元素组成。常见类型包括:

  • 方阵:行数=列数(m=n)。
  • 三角矩阵:上三角矩阵(i>j时元素为0)或下三角矩阵(i<j时元素为0)。
  • 稀疏矩阵:非零元素数目远少于零元素,且分布无规律。

稀疏矩阵的存储

为节省空间,稀疏矩阵采用压缩存储,仅记录非零元素信息:

三元组表(Triplet Table)

存储非零元素的(行号,列号,值)三元组,按行优先排列。

  • 示例矩阵
    0 0 3 0  
    0 2 0 0  
    1 0 0 0  
    
  • 三元组表表示
十字链表(Orthogonal List)

用链表存储非零元素,每个节点包含行指针、列指针、值,形成行列双向链表。

  • 结构示意图

特殊矩阵的压缩存储

对于有规律的矩阵(如对称矩阵、对角矩阵),可利用规律进一步压缩:

  • 对称矩阵:满足A[i][j] = A[j][i],仅存储上三角或下三角部分,节省一半空间。
  • 对角矩阵:非零元素集中在主对角线附近,按对角线顺序存储元素,减少无效空间占用。

通过合理选择存储结构,可显著提升矩阵运算效率(如转置、乘法),并降低内存消耗。

http://www.lryc.cn/news/573640.html

相关文章:

  • Flink作业三种部署模式:架构、配置与实战应用
  • rknn优化教程(三)
  • Bytemd@Bytemd/react详解(编辑器实现基础AST、插件、跨框架)
  • 【云原生】Docker 部署 Elasticsearch 9 操作详解
  • Git Worktree:高效开发的秘密武器
  • C# 数组(数组协变和数组继承的有用成员)
  • webpack+vite前端构建工具 - 8 代码分割
  • 【数据结构试题】
  • C#Halcon从零开发_Day13_几种阈值分割方法
  • 《高等数学》(同济大学·第7版)第五章 定积分 第四节反常积分
  • 目标检测neck算法之MPCA和FSA的源码实现
  • python实战项目77:足球运动员数据分析
  • React 18.2.0 源码打包
  • C++智能指针的知识!
  • 无人机表演越来越火,C端市场大爆发
  • Java基础八股文 - 面试者心理历程与标准答案
  • 微处理器原理与应用篇---常见基础知识(7)
  • 反无人机系统:技术利刃如何守护低空安全?
  • 啥是 SaaS
  • C# .NET多线程异步记录日声,队列LOG
  • docker镜像封装与发布微服务学习
  • NotePad++ 怎么没有找到插件管理?
  • Python打卡DAY34
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • Redis快的原因
  • 【单调栈】-----【小A的柱状图】
  • 大零售生态下开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新研究
  • 如何用AI开发完整的小程序<7>—让AI微调UI排版
  • Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)
  • opencv 之双目立体标定算法核心实现