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

原创 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
 

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

相关文章推荐

[数据结构]线性结构——串

在非数值处理、事务处理等问题常涉及到一系列的字符操作。计算机的硬件结构主要是反映数值计算的要求,因此,字符串的处理比具体数值处理复杂。 串类型的定义 串的基本概念 串(字符串):是零个或多个字符...

【数据结构实验】二叉树的遍历(数组版)

二叉树的遍历(数组版).cpp #include using namespace std; typedef char TElemType; typedef int Status; #define...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

数据结构学习(十)——串的操作

几天没看数据结构了,今天重新开始了。     串是一种特殊的线性表,它的每个结点是一个字符,所以串也称作字符串。     关于串的操作主要有求串长,串复制,串连接,求子串,串插入,串删除,子串定位...

【数据结构实验】二叉树的遍历(栈版)

二叉树的遍历(栈版).cpp #include using namespace std; #define ERROR 0 #define OK 1 #define STACK_ININ_SIZE ...

数据结构(C实现)------- 串

字符串(简称串),可以将其看作是种特殊的线性表,其特殊性在于线性表的数据元素的类型总是字符性,字符串的数据对象红豆为字符集。     串是由0个或多个字符组成的有限序列。一般记作:s = "s1 s2...

【数据结构】串的基本操作

串的基本操作.cpp #include using namespace std; typedef int Status; #define Max 20 #define OK 1 #define E...

数据结构复习——第四章:串、多维数组和广义表

1.串:是由零个或多个字符组成的有限序列;包含字符的个数称串的长度; 2.空串:长度为零的串称空串;        空白串:由一个或多个空格组成的串称空白串;   子串:串中任意个连续字...

数据结构笔记——第四章字符串和多维数组

4.1 字符串 4.1.1 字符串的定义 1、字符串的定义 字符串:是零个或者多个字符数组的有限序列。 空格传:只包含空格的串。 串中所包含的字符个数称为串的长度,长度为0的串称为空串。 ...

数据结构——字符串和多维数组

第 4 章  字符串和多维数组 本章的基本内容是:     字符串。在程序设计语言中大都有串变量的概念,而且实现了基本的串操作,本章重点讨论串的存储结构及模式匹配算法。      数组...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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