27、数据结构笔记之二十七数组的定义和概念
来源:互联网 发布:劳动法律师事务所知乎 编辑:程序博客网 时间:2024/06/03 17:43
27、数据结构笔记之二十七数组的定义和概念
“人生最终的价值在于觉醒和思考的能力,而不只在于生存。--亚里斯多德”
学习了串以及串的几个应用,包括文本编辑,词索引等。这篇开始我们学习数组。首先来介绍数据的一些定义和概念。
1. 数组
数组可以看成是一种特殊的线性表,是线性表的推广,其特点是数据元素仍然是一个表,即线性表中数据元素本身也是一个线性表
2. 数组的定义:
数组是定长线性表在维数上的扩张,即线性表中的元素又是一个线性表,n维数组是一种“同构”的数据结构,其中每个数据元素类型相同,结构一致。、
设有n维数组A[b1,b2,…,bn],其每一维的下界都为1,bi是第i维的上界。从数据结构的逻辑关系角度来看,A中的每个元素A[j1,j2, …,jn](1≤ji≤bi)都被n个关系所约束。在每个关系中,除第一个和最后一个元素外,其余元素都只有一个直接后继和一个直接前驱。因此就单个关系而言,仍是线性的。
以二维数组A[m,n]为例,可以把它看成是一个定长的线性表,它的每个元素也是一个定长线性表。如下图1
A可看成一个行向量形式的线性表:
Am,n=[[a11a12…a1n], [a21a22…a2n], …, [am1am2…amn]];
或列向量形式的线性表:
Am,n=[[a11a21…am1], [a12a22…am2], …, [a1na2n…amn]];
数组结构的特点如下:
(1) 数据元素数目固定,一旦定义了一个数组结构,就不再有元素的增减变化。
(2) 数据元素具有相同的类型。
(3) 数据元素的下标关系具有上下界得约束且下标有序。
数组的两个基本运算
(1) 给定一组下标,存取相应的数据元素。
(2) 给定一组下标,修改相应的数据元素中某个数据项的值。
几乎所有的高级程序设计语言都提供了数组类型。实际上,在程序语言中把数组看成是具有共同名字的同一类型多个变量的集合。
3. 数组的顺序存储
数组一般不作插入和删除运算,一旦定义了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动,因此数组适合于采用顺序存储结构。
由于计算机的内存结构是一维线性的,因此存储多维数组时必须按某种方式进行降维处理,即将数组元素排成一个线性序列,这就产生了次序约定问题。因为多维数组是由较低一维的数组来定义的,依次类推,通过这种递推关系将多维数组的数据元素排成一个线性序列。
对于数组,一旦确定了其维度和各维的长度,便可为它分配存储空间。反之,只要给出一组下标便可求得相应数组元素的存储位置,即在数据的顺序存储结构中,数据元素的位置是其下标的线性函数。
二维数组的存储结构可分为以行为主序的两种方法(如下图2)
设每个数据元素占用L个单元,m,n为数组的行数和列数,Loc(a11)表示元素a11的地址,那么以行为主序优先存储的地址计算公式为:
Loc(aij)=Loc(a11)+((i-1)×n+(j-1))×L
同理,以列为主序优先存储的地址计算公式为:
Loc(aij)=Loc(a11)+((j-1)×m+(i-1))×L
推广至多维数组,按下标顺序存储时,先排最右的下标,从右向左直到最左下标,而逆下标顺序则正好相反。
- 27、数据结构笔记之二十七数组的定义和概念
- 3.1 Swift数组的概念和定义
- 大话数据结构十七:图的一些概念
- 数据结构(1)数据结构的概念和定义
- iOS开发笔记之二十七——UIImage图片的移动、旋转、缩放和裁剪
- 大数据学习笔记之二十七 Hadoop的HBase
- C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- 数组指针的概念定义
- 28、数据结构笔记之二十八数组之矩阵
- C语言中指针数组的概念和定义
- 数据结构编程笔记二十七:第十章 内排序 各种排序算法的实现
- java学习二十七 数组的使用
- 数据结构之数组 笔记
- Eclipse用法和技巧二十七:定义自己的快速联想词
- javascript 数组 二十七
- 4、数据结构笔记之四栈和队列定义
- 数组类型的数据结构在C++里面定义和使用
- 数据结构笔记 第一章基础概念(二)
- HTTP协议深度剖析
- CODEVS 2456 奇偶游戏
- 框架中静态资源被拦截的问题
- 安装drozer可能会遇见的问题
- day3
- 27、数据结构笔记之二十七数组的定义和概念
- ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
- JAVA 排序算法汇总
- 数据运维:数据库运维、大数据技术平台运维
- QQ音乐首页接口
- GitHub参与开源项目图文教程
- Jenkins基础入门-11-新建一个基于git源码管理的Job
- iOS 视频音频播放器
- python处理图像的相关程序