`
owenyang
  • 浏览: 14973 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

数据结构-多维数组

阅读更多

???? 关于多维数据的存储有一些公式需要记忆,其实可以很容易推理出来,但是感觉有时候脑子不知道怎么那么笨,容易一下子就走神,记录一下.

?

特殊矩阵

???  所谓特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵。常见的有对称矩阵、三角矩阵和对角矩阵等。
②元素aij的存放位置
??? aij元素前有i行(从第0行到第i-1行),一共有:
???????? 1+2+…+i=i?(i+1)/2个元素;
??? 在第i行上,aij之前恰有j个元素(即ai0,ail,…,ai,j-1),因此有:
?????????? sa[i?(i+1)/2+j]= aij?
③aij和sa[k]之间的对应关系:
??? 若i≥j,k=i?(i+1)/2+j?? 0≤k<n(n+1)/2<br> ??? 若i<j,k=j?(j+1)/2+i?? 0≤k<n(n+1)/2<br> ??? 令I=max(i,j),J=min(i,j),则k和i,j的对应关系可统一为:
???????? k=i?(i+1)/2+j 0≤k<n(n+1)/2?<br>
(3)对称矩阵的地址计算公式
? LOC(aij)=LOC(sa[k])
????????? =LOC(sa[0])+k?d=LOC(sa[0])+[I?(I+1)/2+J]?d
??? 通过下标变换公式,能立即找到矩阵元素aij在其压缩存储表示sa中的对应位置k。因此是随机存取结构。
? 【例】a21和a12均存储在sa[4]中,这是因为
?????????? k=I?(I+1)/2+J=2?(2+1)/2+1=4

2、三角矩阵??
(1)三角矩阵的划分
???  以主对角线划分,三角矩阵有上三角矩阵和下三角矩阵两种。
①上三角矩阵
???  如下图(a)所示,它的下三角(不包括主角线)中的元素均为常数c。
②下三角矩阵
???  与上三角矩阵相反,它的主对角线上方均为常数c,如下图(b)所示。
? 注意:
 ??? 在多数情况下,三角矩阵的常数c为零。

   

(2)三角矩阵的压缩存储
??? 三角矩阵中的重复元素c可共享一个存储空间,其余的元素正好有n?(n+1)/2个,因此,三角矩阵可压缩存储到向量sa[0..n(n+1)/2]中,其中c存放在向量的最后一个分量中。
??
① 上三角矩阵中aij和sa[k]之间的对应关系

???  上三角矩阵中,主对角线之上的第p行(0≤p<n)恰有n-p个元素,按行优先顺序存放上三角矩阵中的元素a<sub>ij时:
???? aij元素前有i行(从第0行到第i-1行),一共有:
??????? (n-0)+(n-1)+(n-2)+…+(n-i)=i?(2n-i+1)/2个元素;
???  在第i行上,aij之前恰有j-i个元素(即aij,ai,j+l,…,ai,j-1),因此有:
????????? sa[i?(2n-i+1)/2+j-i]= aij?
所以:
? ? ?┌i?(2n-i+1)/2+j-i 当i≤j
?? k=│
????? └n?(n+1)/2 当i>j

②下三角矩阵中aij和sa[k]之间的对应关系
??  ? ┌i?(i+1)/2+j 当i≥j
 ?? k=│
???   └n?(n+1)/2 当i<j

? 注意:
???  三角矩阵的压缩存储结构是随机存取结构。

3.对角矩阵
???  所有的非零元素集中在以主对角线为中心的带状区域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零的矩阵为对角矩阵。
  【例】下图给出了一个三对角矩阵。
???????????
???? 其中:
??? 非零元素仅出现在主对角上(aii,0≤i≤n-1),紧邻主对角线上面的那条对角线上(aii+1 ,0≤i≤n-2)和紧邻主对角线下面的那条对角线上(a i+1i,0≤i≤n-2)。当|i-j|>1时,元素aij=0。
???  由此可知,一个k对角线矩阵(k为奇数)A是满足下述条件的矩阵:
??????????? 若|i-j|>(k-1)/2,则元素aij=0。
???  对角矩阵可按行优先顺序或对角线的顺序,将其压缩存储到一个向量中,并且也能找到每个非零元素和向量下标的对应关系。具体【参见练习】

分享到:
评论

相关推荐

    数据结构多维数组课程设计

    ### 数据结构多维数组课程设计知识点解析 #### 一、问题背景与目标 在计算机科学领域,特别是数据结构的学习和应用中,多维数组是一种重要的数据组织方式。它能够有效地处理多维数据,如图像处理、矩阵运算等场景...

    数据结构中有关多维数组的课程设计

    在数据结构的学习中,多维数组是一个至关重要的概念,它为理解和处理复杂的数据组织提供了基础。多维数组,顾名思义,是数组的一种扩展形式,可以看作是由多个一维数组按照特定规则排列而成的结构。在本课程设计中,...

    matlab-多维数组

    在MATLAB中,多维数组是一种非常重要的数据结构,它能够容纳超过两维的数据,比如三维数组、四维数组等,甚至是更高维度的数组。这些数组可以用来表示图像、视频、多变量数据集等复杂信息。 多维数组的定义: 在...

    数据结构--数组、单链表和双链表介绍以及双向链表 数组和链表.pdf

    数据结构--数组、单链表和双链表介绍以及双向链表 数据结构是计算机科学中的一种基本概念,指的是数据的组织和存储方式。数组、链表是两种常见的数据结构,下面将对它们进行介绍。 一、数组 数组是数据结构中的一...

    matlab开发-多维数组的合并排序

    这种数据结构非常适合处理高维数据,如图像、音频信号等。 合并排序在MATLAB中的实现通常涉及以下步骤: 1. **分解**:将多维数组沿着选定的轴分解成两个或更多的子数组。对于多维数组,我们可能需要沿不同轴进行...

    数据结构源码:多维数组

    多维数组是一种常见且重要的数据结构,特别是在处理表格型数据或者矩阵运算时。本篇将深入探讨多维数组的概念、实现方式以及它在源码中的应用。 多维数组可以看作是一组数组的集合,每个数组称为一个维度,这些维度...

    第26课 - 多维数组和多维指针.rar

    1. 定义:多维数组是最常见的多维数据结构,它由多个一维数组组成。最常见的形式是二维数组,也就是矩阵,但也可以定义三维、四维甚至更多维的数组。例如,一个二维数组可以这样定义: ```c int matrix[3][4]; ``` ...

    易语言赋值定义多维数组

    在易语言中,数组是存储一系列相同类型数据的数据结构,而多维数组则是数组的一种扩展,可以理解为数组的数组,允许我们在一个变量中存储多个有序的数据集合。 在"易语言赋值定义多维数组"这个主题中,我们将深入...

    对C#中多维数组,进行学习.实现多维数组的输入和输出

    在C#编程语言中,多维数组是一种非常重要的数据结构,它允许我们存储二维或更高维度的数据。在本教程中,我们将深入探讨如何创建、初始化和操作多维数组,以及如何实现它们的输入和输出。 首先,让我们了解什么是...

    JAVA程序设计课件-多维数组.pptx

    在这个课件中,我们聚焦于一个关键概念——多维数组,它是Java编程中处理复杂数据结构的重要工具。 多维数组,顾名思义,就是数组的数组,它允许我们在一个数组中存储其他数组。在实际编程中,最常用的是二维数组,...

    易语言重定义多维数组

    在易语言中,处理多维数组是一项常见的任务,尤其是在需要处理复杂数据结构时。多维数组可以理解为数组的数组,它能够存储二维或更高维度的数据,比如表格、矩阵等。 本资源名为“易语言重定义多维数组源码”,意味...

    多维数组程序设计 多维数组程序设计

    多维数组程序设计是计算机科学中的一种重要技术,多维数组是指数组中的每个元素都是一个数组,多维数组可以用来描述复杂的数据结构。多维数组程序设计的主要目的是使用数组进行较为复杂的应用,学习使用数组进行数据...

    多维数组下标计算 多维数组下标计算 多维数组下标计算

    数组是一种基本的数据结构,广泛应用于编程语言中。数组可以看作是一种容器,存储多个具有统一类型的数据元素。每个元素通过不同的下标标识。数组可以是一维的,也可以是多维的。 二、二维数组 二维数组可以看作是...

    matlab 三维 数组 多维数组-创建多维数组-使用特殊函数 算法开发、数据可视化、数据分析以及数值计算 Matlab课程

    这个"matlab 三维 数组 多维数组-创建多维数组-使用特殊函数 算法开发、数据可视化、数据分析以及数值计算 Matlab课程"显然是为了帮助学习者深入理解和应用MATLAB中的多维数组功能。下面我们将详细探讨相关知识点。 ...

    VB 多维数组实例

    总之,VB中的多维数组是处理复杂数据结构的关键工具,熟练掌握其用法能够极大地提高代码的效率和可读性。在实际编程中,应根据具体需求选择合适的数组维度,并合理利用数组的优势来优化程序设计。

    matlab 三维 数组 多维数组-创建多维数组-使用cat函数 算法开发、数据可视化、数据分析以及数值计算 Matlab课程

    在MATLAB课程中,"27 多维数组-创建多维数组-使用cat函数.mp4"这一视频教程很可能详细介绍了如何创建多维数组,以及如何通过`cat`函数进行数组拼接。通过观看这个视频,你可以深入理解这些概念,并通过实践提升...

    数据结构中多维数组的实现(C语言),数据结构实验:设计一个多维数组

    数据结构实验:设计一个多维数组

    易语言子程序返回多维数组的实现方法

    当需要返回的数据结构复杂,如多维数组时,编程者需要掌握特定的技巧来实现这一功能。本篇文章将深入探讨易语言中子程序如何返回多维数组,以及如何处理列表框数组。 首先,我们要理解易语言中的数组概念。数组是一...

    设计并模拟实现整型多维数组类型

    在数据结构的学习中,设计并模拟实现整型多维数组类型是一项重要的实践任务。多维数组是计算机科学中处理复杂数据的一种基础结构,它能够帮助我们有效地存储和操作矩阵或类似表格的数据。在这个课程设计中,我们将...

Global site tag (gtag.js) - Google Analytics