1.数组定义
数组是指一组数据的集合,其中每个数据被称为元素。
2.创建数组的方法:
(1)利用数组字面量 创建数组 并赋值 默认值为 1 2 3
var arr=[1,2,3];
(2)利用new Array() 创建数组
var arr = new Array();
3.变量的下标,也可以叫索引,从0开始,依次往后递增。
4.数组可以通过索引(下标)来访问、设置、修改对应的数组元素。
5.数组的遍历:
(1)for (let i=0;i<arr.length;i++){
console.log(arr[i]);
}
(2)for(let value of arr){
console.log(arr[value])
}
6.数组方法
push:向数组的末尾添加一个或多个元素,格式为(操作符).push(添加的元素,添加的元素)
pop:删除并返回数组的最后一个元素,.pop()
unshift:向数组的开头添加一个或多个元素,并返回新的数组长度,.unshift(添加的元素,添加的元素)
shift:删除数组中第一个元素 并返回删除的元素,.shift()
Array.isArray(对象名):判断当前的对象 是不是数组
map:返回一个新的数组,数组中的元素为原始数组的处理后的值,map 方法会按照原始数组中的元素顺序依次处理元素
例如: let newArray = array.map(x=>x+2);
filter:创建一个数组,新的数组中的元素是通过检查指定数组中符合条件的元素,注意filter不会对空的数组进行检测,不会改变原始数组。
every:用于检测数组中的所有元素是否符合指定的条件,如果数组中检测的有一个元素不满足,则整个表达式返回false 并其他元素不会再进行检测,如果所有的元素满足条件 则返回true
some:用于检测数组中的元素是否满足指定的条件,会依次执行数组中每个元素:如果有一个元素满足条件 则返回true,如果没有满足条件的元素 返回 false
splice:用于添加 或删除数组中的元素 .splice(开始下标,长度);
注意:这个方法会改变原始数组;
如果仅删除一个元素,则返回一个元素的数组
sort:对元素小于十的数组进行排序;如果元素有大于十的,则添加形参a,b,对a和进行大小比较;
冒泡排序:
数组的遍历:
数组中的每一个元素都可以通过索引访问到。数组的索引通常从0开始,即数组中第一个元素的索引为0.数组的最后一个元素位于(n-1)个索引处。我们将其称之为基于0的索引。数组也可以是基于其它数的,我们将其称之为基于n的索引。
使用for循环简单的遍历数组中的所有索引,可以访问数组中的所有元素。
元素的插入:
插入尾部
在数组还有足够的空间可供插入时,在数组的尾部插入一个元素是非常容易的。找到数组最后一个元素的索引,并将新插入元素的索引+1即可完成插入。
任意位置插入
通过将该位置后的所有元素的位置向后移动,可在该位置插入元素。
void insert_position(int arr[]){
int i=0,pos,num;
printf("输入要插入的元素值:");
scanf("%d",&num);
printf ("输入要插入元素的索引位置");
scanf("%d",&pos);
for(i=n-1;i>=pos;i--){
arr[i+1]=arr[i];
}
arr[pos]=num;
n=n+1;//增加已使用索引的总数
删除尾部元素:
只要数组不为空,删除数组中的元素是很容易的。找到最后一个元素的索引,然后删除该元素即可。
可以在任意索引处删除元素,方法是删除该位置的元素,然后将该位置之后的所有元素向前移动以填充删除的位置。
void delete_position(int arr[]){
int i,pos;
printf("输入要删除元素的索引位置");
scanf("%d",&pos);
for (i=pos;i<n-1;i++>){
arr[i]=arr[i+1];
}
n=n-1;增加已使用索引的总数
访问
数组可以直接使用索引访问,因此,访问数组元素的时间复杂度为O(1)
查找
从数组中查找一个给定的值,需要遍历数组中的每一个元素,知道找到给定值为止。假设查找的形式为线性查找(数组最基本的查找形式),则查找的时间复杂度为O(n).
也存在一些其它的查找算法,比如,二分搜索,可在O(log n)的时间复杂度内搜索,但前提是当前数组为有序数组。
插入
在数组的两个元素之间插入一个新的元素,需要将插入之后的所有位置的元素向后移动。这就意味着如果在数组的开头插入元素,需要将数组的所有元素向后移动,因此插入操作的时间复杂度为O(n)
删除
在数组的两个元素之间删除一个元素,需要将删除位置之后的所有位置的元素向前移动。这就意味着,如果删除数组的第一个元素,需要将数组的所有元素统一向前移动,因此删除操作的时间复杂度为O(n)
空间要求
数组仅占据用于存储指定数据类型的元素的空间,这就意味着,存储n个元素所要求的空间复杂度为O(n)
数组的优点
相比其它类型的数据结构,数组有以下优点:
数组允许随机访问数组元素,每个存储在数组中的元素可以通过直接访问其索引来使用
数组对存储友好。这意味着在某些情况下,由于数组的线性存储方式,代码的执行顺序会大大提高
数组的缺点
声明数组时,需要指定数组的长度。初始声明数组的长度过长或过短,在移动数组元素时都会有导致效率变低
插入和删除元素之后保持数组的连续性代价是昂贵的,因为有可能需要重新排列所有数组元素。