文档章节

多维数组

 野渡书生
发布于 2017/07/30 01:45
字数 1001
阅读 2
收藏 0

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

多维数组

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

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

(a1,a2,…,an)

2、二维数组

  二维数组Amn可视为由m个行向量组成的向量,或由n个列向量组成的向量。 

     

  二维数组中的每个元素aij既属于第i行的行向量,又属于第j列的列向量。

3、多维数组     

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

4、数组的顺序存储方式     

  由于计算机内存是一维的,多维数组的元素应排成线性序列后存人存储器。  数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。一般采用顺序存储方法表示数组。
(1)、行优先顺序
  将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
  【例】二维数组Amn的按行优先存储的线性序列为:

a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn

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

(2)、列优先顺序
  将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
  【例】二维数组Amn的按列优先存储的线性序列为:

a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn

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

5、数组元素的地址计算公式

(1)、按行优先顺序存储的二维数组Amn地址计算公式

LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d

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

(2)、按列优先顺序存储的二维数组Amn地址计算公式

LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d

(3)、按行优先顺序存储的三维数组Amnp地址计算公式

LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d

(4)、下界不为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

注意:
 以下讨论的数组存储结构都以C语言下标表示。

矩阵的存储

1、矩阵的二维数组描述

  矩阵用二维数组描述时,存储的密度为1。可以对其元素进行随机存取,各种矩阵运算也非常简单。

2、矩阵的压缩存储

  矩阵中非零元素呈某种规律分布或者矩阵中出现大量的零元素的情况下,为了节省存储空间,我们可以对这类矩阵进行压缩存储:即为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

特殊矩阵

 

稀疏矩阵

 

本文转载自:http://www.cnblogs.com/yedushusheng/p/5527869.html

上一篇: 字符串
下一篇:
粉丝 9
博文 217
码字总数 158821
作品 0
南京
私信 提问
C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别

多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3];  或声明时即赋值,由系统推断长度 int [,] test1 = { 交错数组...

痴者工良
2018/11/09
0
0
使用awk的二维数组解决一个日志统计的实际问题

项目中遇到的一个实际问题,日志如下 2013-09-13 00:06:09:adid:100002542013-09-13 00:06:14:adid:100002542013-09-13 00:06:43:adid:100002532013-09-13 00:06:48:adid:100002542013-09-13......

fzxu_05
2013/09/18
325
1
NumPy快餐教程(1) - 如何生成多维数组

NumPy快餐教程(1) - 如何生成多维数组 Python现在是最热门的人工智能语言,各种工具的支持如Google的Tensorflow,都是首选支持Python的。 但是,与R语言不同,Python语言设计时,并没有考虑对...

lusing
2018/01/03
0
0
Python数据分析numpy基础-维度的认识

什么是多维数组? 核心对象是同型的多维数组(简单理解就是一个表格,通常内容都是些数字),具有相同的数据类型。 概念: 1. axes(轴):数组的维度统称为轴。 2. rank:轴的数量称为rank。...

十年磨一剑3344
2018/07/21
22
0
PHP之新手自学基础知识(三)——数组篇

数组是什么? 数组是一个能在单个变量中存储多个值的特殊变量。 如果一个项目清单(例如:手机名字的清单),将其存储到单个变量中如下所示: 然而,如果您想要遍历变量并找出特定的一个呢?...

天谴残魂
2018/01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
8分钟前
0
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
737
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
26
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
79
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部