[数据结构]非线性结构——多维数组

原创 2015年07月09日 21:25:51

多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能有多个直接前驱和多个直接后继。

数组定义

数组是由n(n>1)个具有相同数据类型的数据元素a1,a2,... ,an组成的有序序列,且该序列必须存储在一块地址连续的存储单元中。

  • 数组中的数据元素具有相同数据类型。
  • 数组是一种随机存取结构,给定一组下标,就可以访问与其对应的数据元素。
  • 数组中的数据元素个数是固定的。

多维数组

  • 1、一维数组(向量)——常用数据类型

一维数组(向量)是存储于计算机的连续存储空间中的多个具有统一类型的数据元素。
同一数组的不同元素通过不同的下标标识。(a1,a2,…,an)

  • 2、二维数组

二维数组Amn可视为由m个行向量组成的向量,或由n个列向量组成的向量。
二维数组中的每个元素Aij既属于第i行的行向量,又属于第j列的列向量。


  • 3、多维数组

三维数组Amnp可视为以二维数组为数据元素的向量。四维数组可视为以三维数组为数据元素的向量……
三维数组中的每个元素Aijk都属于三个向量。四维数组中的每个元素都属于四个向量……

数组的顺序存储方式

由于计算机内存是一维的,多维数组的元素应排成线性序列后存入存储器。
数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。一般采用顺序存储方法表示数组。

行优先顺序

将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
二维数组Amn的按行优先存储的线性序列为:a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn。注意:

  • ①PASCAL和C语言中,数组按行优先顺序存储。
  • ②行优先顺序推广到多维数组,可规定为先排最右的下标。

列优先顺序

将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
二维数组Amn的按列优先存储的线性序列为:a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn。注意:

  •  ①FORTRAN语言中,数组按列优先顺序存储。
  •  ②列优先顺序推广到多维数组,可规定为先排最左的下标。

数组元素的地址计算公式

  • 行优先顺序存储的二维数组Amn地址计算公式:LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d

其中:
  ①LOC(a11)是开始结点的存放地址(即基地址)
  ②d为每个元素所占的存储单元数
  ③由地址计算公式可得,数组中任一元素可通过地址公式在相同时间内存取。即顺序存储的数组是随机存取结构。

  • 列优先顺序存储的二维数组Amn地址计算公式:LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d
  • 行优先顺序存储的三维数组Amnp地址计算公式:LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
  • 下界不为1的二维数组的地址计算公式

①二维数组A[c1..d1,c2..d2]的地址计算公式:LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
②下界为0的二维数组的地址计算公式(C语言中使用):LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构与算法 一维数组-二维数组-三维数组

  • 2010年11月03日 18:32
  • 61KB
  • 下载

数据结构-多维数组

多维数组: 多维数组的定义和存储 多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能有多个直接前驱和多个直接后继。 矩阵的存储 ...
  • coolingxyz
  • coolingxyz
  • 2016年11月20日 19:54
  • 178

多维数组的存储表示与实现--自己写数据结构

国际惯例,直接上代码 文件multiarray.h存放数据结构体,如下: #ifndef _MULTIARRAY_H_ #define _MULTIARRAY_H_ #define MAX_DIM...
  • XIAO_PING_PING
  • XIAO_PING_PING
  • 2014年12月15日 23:08
  • 530

数据结构之数组

数组的考点:
  • liuxiaocong2
  • liuxiaocong2
  • 2016年06月26日 15:06
  • 365

数据结构习题之多维数组和广义表

第五章  多维数组和广义表 一、基本要求、重点、难点     本章目的是介绍多维数组的逻辑结构特征及其存储方式,特殊矩阵和稀疏矩阵的压缩存储方法。本章重点是熟悉多维数组的存储方式、矩阵的压缩存储方式...
  • erlian1992
  • erlian1992
  • 2015年07月01日 15:45
  • 1825

关于Java中多维数组的内存结构分析

本文是推测分析的结果,非真理性,因为JDK的源代码部分内容有限,不可把本文作为“真理”使用,仅提供参考提供给对底层感兴趣的小伙伴用来阅读之用!当然尽可能保证文章的客观性,所有的实验在各个平台进行了很多...
  • silentbalanceyh
  • silentbalanceyh
  • 2015年01月12日 16:32
  • 5409

数据结构--深入数组

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的,这篇博客将深入介绍数组在内存中的运行机制。 内存中的数组 数组引用变量只是一个引用,这个引用变量可...
  • u011794238
  • u011794238
  • 2016年05月12日 16:32
  • 422

数据结构-二维数组-存储结构

数组的两个主要的顺序存储方式,数组具有随机访问特点,要求能够依据下标计算出任一数组元素的存储地址(概念上的地址):计算机主存的每个地址和存储内的每个字节是一一对应的,而每个字节间的排列顺序是线式的。在...
  • majinshanNUN
  • majinshanNUN
  • 2017年09月28日 11:18
  • 317

java数据结构之多维数组实现

多维数组其实就是数组的一种扩展形式。这里介绍几种特殊的多维数组即特殊的矩阵。 1.对称矩阵的压缩存储算法: 矩阵中的所有数据通过一定的规律存储在一维数组中。其中k=j*(j-1)/2+i-1。其中j和...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016年06月07日 11:52
  • 809

非线性结构-多维数组

多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能有多个直接前驱和多个直接后继。 多维数组 1、数组(向量)——常用数据类型  一维数组(向量)是存储于计算机的连...
  • qilixiang012
  • qilixiang012
  • 2014年08月18日 15:18
  • 587
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[数据结构]非线性结构——多维数组
举报原因:
原因补充:

(最多只允许输入30个字)