insert 数组_数组,编程语言的基石

在计算机的世界中,数据可以有各种各样的组织形式,比如,模拟现实中排队取钱的队列,代表复杂的社交网络的图结构等,不同的数据结构各自适应不同的情况。学习数据结构,我们能够为我们要解决的问题,选择合适的数据结构进行数据存储,从而使得程序更加高效。


数组

数组,是数据结构中最简单,也最常用的一个数据结构。所谓数组,是有序的元素序列。若将有限个类型相同的变量>,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组

查找元素

2f2e0dbee3f5591215986f8d4c7b3781.png

数组是一个顺序存储的数据结构,如图所示是一个长度为10的数组,它的特点是存取速度快。通过指定下标,我们可以很快的取值。比如a[0],a[5]等操作,都可以在O(1)时间内完成。然而,如果我们并不提前知道元素所在的位置的呢?假如我们要查找的元素为100,伪代码表示如下

for(int i=0;i<n;i++){ if(a[i]==100){ return i;//返回元素所在下标 } } return -1;//如果遍历完都没有找到,则返回-1.

最好情况下,100在a[0]的位置,一下子就能找到,最坏情况下,100在数组的最后面,甚至是不存在,则需要遍历整个数组。****所以在数组中查找元素的时间复杂度为O(n)。

插入元素

2f2e0dbee3f5591215986f8d4c7b3781.png

如果我们要在数组中插入一个新的元素,根据插入位置的不同,效率也有所不同。以上图为例,如果要插入的位置在a[5],那么直接a[5]=x就好。如果要插入的位置在a[0]呢?就需要将所有的元素往后移动一格,再把a[0]赋值为x。把所有元素往后移动一格的时间复杂度为O(n),所以在数组中插入新元素时,时间复杂度为O(n)。其伪代码如下:

for(i=n;i>=insert_index;i--){//从后往前遍历到插入位置之后,把前面的数赋值给后面的数 a[i]=a[i-1]; } a[i]=x;//跳出循环后,i刚好位于插入位置,直接赋值新插入的元素。 a.length = a.length+1;

删除元素

2f2e0dbee3f5591215986f8d4c7b3781.png

除了新增,删除也是同理。如果要删除a[4]位置的99,直接把a.length减少1就好。在计算机中,通常删除一个东西,并不是真的要去删除它,而是不再去管理它,再也访问不到它,就当做删除了。而如果是删除a[1]处的90,除了将a.length减1之外,还需要将a[2]到a[4]的数据往前移一格,变为a[1]到a[3],把插入位置后的所有元素前移一格的时间复杂度为O(n)。所以数组删除元素时,时间复杂度为O(n)

for(i=delete_index-1;i<n-1;i++){//从删除位置开始,用后面一个位置的值覆盖前面的值。 a[i]=a[i+1]; } a.length = a.length - 1;

总结

时间复杂度:访问元素O(1),查找元素O(n),插入元素O(n),删除元素O(n)优点****:连续存储,具有在O(1)时间内随机存取的特性。缺点:没有用到的空间被浪费了。


公众号:萌凯的程序人生
一枚IT研究生,致力于分享自己的学习经历和总结!
喜欢的话请点赞关注,谢谢您!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值