数据结构与算法二:数组

一维数组:

一、概述:

  • 数组在内存中是一片连续的空间且元素相同
  • 可以快速根据索引定位到某元素
  • 但是新增、删除元素的时候需要移动元素位置,效率会变低
    在这里插入图片描述二、数组的声明与创建:
    1.有两种声明方式:
int[] a;
int a[];

2.创建方式有两种:

int[] a1 = new int[5]; //直接指定大小
int[] a2 ={1,2}; //有多少个value就有多大

三、自定义数组:
1.索引(数组索引)的语意:
索引可以有语意,也可以无语意,有语意如下标就是学号,能快速定位某学生;那么问题来了——如果索引无语意,如何判断有无数据,添加元素、删除元素呢?
2.自定义数组:
int[] data就是数组;capacity表示容量(等同于data.length;可以省略);size表示已经占用的大小。

在这里插入图片描述
由此可自定义数组的增删改查;
3.泛型数组:
在这里插入图片描述
在这里插入图片描述
4.动态数组(add时扩容):
动态扩容,即容量不够的时候再定义一个更加大(如像ArrayList那样1.5倍);然后将旧数组复制到新数组上,然后将原来的索引指向新数组,旧数组释放;
四、数组的时间复杂度:
1.新增:
在这里插入图片描述2删除:
在这里插入图片描述3修改:
在这里插入图片描述
4查询:
在这里插入图片描述总结:
在这里插入图片描述
五、均摊时间复杂度:
有时均摊时间复杂度更合理:
在这里插入图片描述
六、解决复杂度震荡问题:
如果在扩容与缩容之间位置频繁操作,很浪费性能,我们可以lazy操作(如,不直接缩容,等下一次操作也是删除的时候再缩容);或者当size为length的四分之一时再缩容即可,但是要判断lengtn不能小于初始容量:
在这里插入图片描述
二维数组:

七、二维数组的声明与初始化:
二维数组其实就是盛放数组的数组,二维数组的元素为一维数组
1.声明与初始化三种方式:

int[][] a1=new int[m][n];//m表示这个二维数组有多少数组,n表示一维数组的元素个数
int[][] a2=new int[m][];//一维数组的数量动态给出
int[][] a2={{a,b},{a,b},{a,b}};//隐式声明

2.二维数组的使用:
在这里插入图片描述

3.稀疏数组:
适用于数组中的数据总数远远大于非零数据的数量并且非零元素的分布没有规律 ;如刚开始下的五子棋:在这里插入图片描述

在这里插入图片描述
数据结构与算法更多相关内容【持续更新中】:

  • 【数据结构与算法一:时间频度和时间复杂度】: 传送门.
  • 【数据结构与算法二:数组】: 传送门.
  • 【数据结构与算法三:栈和队列】: 传送门.
  • 【数据结构与算法四:链表】: 传送门.
  • 【数据结构与算法五:哈希表-哈希函数设计原则-哈希冲突解决方案】: 传送门.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值