阵列(ADT)
的数组是基本的抽象数据类型它保存由整数索引访问的有序项集合。这些项可以是任何类型,从基本类型(比如整数)到更复杂的类型(比如类的实例)。因为它是一个ADT,所以它没有指定实现,但几乎总是由一个数组(数据结构)或动态数组.
除非另有说明,在本wiki的其余部分,“数组”一词将指抽象数据类型,而不是数据结构。
数组有一个属性:它们使用整数索引存储和检索项。项存储在给定的索引中,可以在以后通过指定相同的索引进行检索。这些索引的工作方式特定于实现,但您通常可以将它们视为值在数组中的槽号。看看下面的图片:
在这个数组的可视化表示中,您可以看到它的大小为6。一旦添加了6个值,就不能再添加了,直到调整数组的大小或删除某些内容。您还可以看到数组中的每个“槽”都有一个相关联的编号。通过使用这些数字,程序员可以直接在数组中建立索引以获得特定的值。注意,此图像使用基于一的编号。大多数语言使用从零开始的编号,其中数组中的第一个索引是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]
注意数组默认是如何使用零的。这是因为我们创建了一个整数数组。如果我们创建了一个字符串数组,默认值将是
零
.
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#相反,您将创建一个空列表并使用追加方法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。加州大学戴维斯分校欧洲经委会初级Wiki.检索自2016年4月10日http://1.bp.blogspot.com/_kLg3mPfGL6E/S_nN7gNjwHI/AAAAAAAAALA/v3AcbLZ-kAc/s1600/one+dimension+array.jpg