阵列(ADT)
的数组是一个基本的抽象数据类型它保存可由整数索引访问的有序项的集合。这些项可以是任何类型,从基本类型(如整数)到更复杂的类型(如类实例)。因为它是一个ADT,所以它没有指定实现,但几乎总是由一个数组(数据结构)或动态数组.
除非另有说明,对于本wiki的其余部分,“数组”一词将指抽象数据类型,而不是数据结构。
数组有一个属性:它们使用整数索引存储和检索项。项存储在给定的索引中,以后可以通过指定相同的索引来检索。这些索引的工作方式是特定于实现的,但是您通常可以把它们看作值在数组中所占据的槽号。看看下图:
在这个数组的可视化表示中,您可以看到它的大小为6。一旦添加了6个值,就不能再添加其他值,直到调整数组的大小或删除某些值。您还可以看到数组中的每个“槽”都有一个相关联的数字。通过使用这些数字,程序员可以直接在数组中建立索引以获得特定的值。注意,此图像使用基于1的编号。大多数语言使用从零开始的编号,其中数组的第一个索引是0,而不是1。
Python的内置列表提供数组功能。C、c++、c#、Java和其他一些语言都有类似的处理数组的语法。下面是如何在Java中初始化一个数组,然后将值赋给一个索引。下面的代码创建了一个大小为5的新数组,并将索引2设置为4。
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 |
|
可以将数组看作一组编号的方框,每个方框只能容纳一项。假设我们有10个盒子。这意味着我们不能存储11件物品,因为这比我们拥有的盒子数量还要多。如果我想把我的手机存在5号盒子里,我可以直接去那里把它放在盒子里。之后,如果我想看看5号盒子里有什么,我可以再次直接去那里看里面,看看我的手机。
最小所需功能
数组在不同的实现中具有非常不同的功能,但在所有情况下都可以找到以下操作。它们构成了其他更复杂操作的基础。
函数名* 提供的功能 (我,v)
设置index的值我来v (我)
返回index的值我 不需要具体的名字。事实上,某些功能可以通过特定的语法直接由给定的语言提供。
例子问题
使用这些基本功能,你可以设计更复杂和有用的。我们看看能不能写出一些更复杂的函数。
1)如何打印出数组中的每个元素?(注:这有时被称为遍历.)
我们知道静态数组的大小。假设是10。然后,我们简单地运行(我)
函数用于从1到10的每个索引。
2)如何确定某个值是否在数组中?(注:这有时被称为搜索.)
这和第一个问题很相似。如果我们知道大小是10,就可以(我)
对于每个指数。如果在任何时候,我们得到了我们正在寻找的值,我们就知道数组包含了我们要的值。
3)如何将两个数组加在一起?(提示:您必须创建一个新数组。)
假设我们有两个数组,一个而且B.一个大小为4B尺码是6号。如果我们想做这个手术A + b
,我们需要创建一个数组C10号的。然后,我们可以搜索每一个元素一个并将它们添加到相应的索引中C.然后,我们会检查每一个元素B并将它们添加到相应的索引中+ 4在C.它看起来是这样的:
1 2 3 4 5> > > =[0、2、4、6)> > > B =(1、3、5、7、9、11]> > > C = A + B > > > C[0、2、4、6 1,3,5,7,9,11)
Java中的数组
Java数组类型的实现示例是数组抽象数据类型它使用数组数据结构。其他语言中也存在其他实现,我们将在后面讨论。
创建数组:
在Java中创建数组时,需要一个大小和类型。下面是如何声明一个大小为10的整数数组的示例。
创建数组
1 2 3>>>int[]myArray=新int[10];>>>系统.出.打印(数组.toString(myArray));[0,0,0,0,0,0,0,0,0,0]
注意数组默认使用0。这是因为我们创建了一个整数数组。如果我们创建一个字符串数组,默认值为
零
.
1 2 3>>>字符串[]myArray=新字符串[10];>>>系统.出.打印(数组.toString(myArray));[零,零,零,零,零,零,零,零,零,零]
设置值:
要在Java数组的某个索引处设置值,可以使用[]
语法。索引放在括号内,值放在等式的另一边。在Java中,索引从零开始!记得对你的编程语言做适当的研究,了解它是如何处理索引的。
1 2 3 4 5 |
|
获取值:
在某个索引处获取值使用与设置值相同的符号。
获取索引的值
1 2 3 4>>>int[]myArray=新int[5];>>>myArray[1]=One hundred.;>>>系统.出.打印(myArray[1]);One hundred.
在Java中,可以创建任何基元数据类型、抽象数据类型或自定义类的数组。Java还提供了ArrayList类型,给你更多的灵活性。
其他语言中的数组
让我们看看其他语言中的数组。下面的所有语言都具有与Java相同的严格的数组实现。在每个数组中,我们将创建一个整数数组,对其中的元素求和,然后输出它。
Python:
1 2 3 4 5 6 7 8 9defsum_elements():my_array=[没有一个,)*3.#以这种方式声明和使用列表不是python的my_array[0]=1#你应该创建一个空列表并使用append方法my_array[1]=3.但是如果我们在这里这样做,那么我们就不会炫耀它了my_array[2]=5#数组功能非常重要总和=0为我在范围(0,len(my_array)):总和+ =my_array[我]打印(总和)
Java:
1 2 3 4 5 6 7 8 9 10 11公共无效sum_elements() {int[]myArray=新int[3.];myArray[0]=1;myArray[1]=3.;myArray[2]=5;int总和=0;为(int我=0;我<myArray.长度;我++){总和+ =myArray[我];}系统.出.打印(总和);}
c++:
12 3 4 5 6 7 8 9 10 11 12无效sum_elements(){intlen=3.;intmyArray[len];myArray[0]=1;myArray[1]=3.;myArray[2]=5;int总和=0;为(int我=0;我<len;我++){总和+ =myArray[我];}性病::cout<<总和;}
在c++中,我们必须知道数组的大小才能构造for循环。
二维数组
许多电脑游戏,如桌面游戏或FPS游戏都使用二维“棋盘”或矩阵。处理这类问题的程序需要一种在二维空间中表示对象的方法。一种自然的方法是使用二维数组,其中我们使用两个指标说 而且 ,以引用数组中的单元格。第一个索引通常指一行,而第二个索引指列号。使用这样的数组,我们可以很容易地表示任何需要二维数据结构的问题。
写一个程序来求两个方阵的和。
Java中的示例解决方案
1 2 3 4 5 6 7 8 9 10//A和B是两个矩阵相加公共静态int[] []sum_matrices(int[] []一个,int[] []B){int[] []C=新int[一个.长度] [一个[0].长度];为(int我=0;我<一个.长度;我++){为(intj=0;j<一个[0].长度;j++){C[我] [j]=一个[我] [j]+B[我] [j];}}返回C;}
多维数组的思想也可以扩展到三维情况,我们可以使用数组的数组的数组。事实上,它可以扩展到任意数量的维度。
参考文献
- 美国能源部,J。加州大学戴维斯分校ECE初级维基.检索2016年4月10日,从http://1.bp.blogspot.com/_kLg3mPfGL6E/S_nN7gNjwHI/AAAAAAAAALA/v3AcbLZ-kAc/s1600/one+dimension+array.jpg