认识数据结构之【数组】
须弥零一
认识数据结构之【数组】今天来简单说说数组,错过往期文章的朋友可以点击下面列表的链接查阅。
在C语言等绝大部分语言中是允许构造多维数组的。多维数组元素有多个下标, 以标识它在数组中的位置,所以也称为多下标变量。您可以参考上面二维数组的结构图尝试着画一下三维数组的内存结构,当你理解了如何从二维数组到三位数组,那你也就完全理解了多维数组。此处作者就偷个懒,不绘制三位数组的内存结构了。
认识数据结构之【数组】今天来简单说说数组,错过往期文章的朋友可以点击下面列表的链接查阅。
认识数据结构系列往期文章:
数组
数组的定义
数组(Array
)是有序的元素序列。将有限个类型相同的变量集合命名,这个名称就叫做数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。上图表示的是一个长度为10的数组,它的变量名为name;上图中0-9的数字表示了数组name的下表和元素(数组下标从0开始)。数组的特点
1.数组是相同数据类型的元素的集合。2.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
二维数组
前面介绍的数组只有一个下标,称为一维数组, 其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的。二维数组在概念上是二维的,即是说其下标在两个方向上变化, 下标变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。三位数组&多维数组
三维数组,是指维数为三的数组结构。三维数组是最常见的多维数组,由于其可以用来描述三维空间中的位置或状态而被广泛使用。 三维数组就是维度为三的数组,可以认为它表示对该数组存储的内容使用了三个独立参量去描述,但更多的是认为该数组的下标是由三个不同的参量组成的。在C语言等绝大部分语言中是允许构造多维数组的。多维数组元素有多个下标, 以标识它在数组中的位置,所以也称为多下标变量。您可以参考上面二维数组的结构图尝试着画一下三维数组的内存结构,当你理解了如何从二维数组到三位数组,那你也就完全理解了多维数组。此处作者就偷个懒,不绘制三位数组的内存结构了。
字符数组
用来存放字符量的数组称为字符数组,即数组的每个元素为一个字符类型的元素。在C、Java等大部分语言中,字符串都是使用字符数组来表示的。比如在C语言中用以下三种任意一种方式为字符变量name
赋值:虽然分别使用char name[]={'j','e','r','e','m','y'};
char name[]={"jeremy"};
char name[]="jeremy";
printf(name)
打印上面三个name显示的结果都是jeremy
。但实际上,上面的三个name
数组的长度是不一样的,这是因为使用字符串赋值的方式,会有一个看不见的字符\0
在末尾的位置。比如字符串jeremy
在内存中的样子是下面这样的:另外,Java中的toCharArray()
方法是不会多出来这个\0
结束符的。这是因为Java String的toCharArray()
方法,本来就是在复制的时候没有复制那个\0
字符,源码如下:publicchar[] toCharArray(){
// Cannot use Arrays.copyOf because of class initialization order issues
char result[]=newchar[value.length];
System.arraycopy(value,0, result,0, value.length);
return result;
}
最后
本篇文章主要介绍了数组的一些简单知识,明确了数组是一组同种类型的数据集合,并且是在内存结构上连续的数据结构。下期文章将介绍链表这种数据结构,它是在逻辑上联系的,和数组有一些相似的地方。此处就不多说下,大家下期见~(●ˇ∀ˇ●)欢迎关注我的公众号“须弥零一”,原创技术文章第一时间推送。
评论