一.数据结构
分为三类:
线3性结构:数组(存储是连续的),队列,栈,链表,哈希表.......
树型结构:二叉树,二分搜索树,AVL树(平衡树
),红黑树,堆,Trie,线段树,并查集.......
图结构:邻接矩阵,邻接表
数据结构的作用:根据不同的数据结构将问题高效的解决。
数据结构+算法=程序
二.数组
(1)数组:一组相同数据类型数或相同类型数的集合。
(2)数组中内存中如何分配:分配连续的空间,因此在创建数组时要指定数组的大小数组只要创建,就不能修改了
(3)数组如何定义
int [] nums=new int[10];,
(4)使用数组(crud 增删改查)
使用数组的下标(索引)
数组名[下标]例如:nums[0] num[6]
下标从0开始,到数组中元素的个数(数组的长度)-1
(5)空数组 null[]
nullpointexception 空指针的异常(谁为空)
下标越界
ArraylndexOutofboundsException 上面的示例下标最大是9,假如num[10],则为越界,或下标为负数时,也属于越界。
(6)数组的优点
快速查询
(7)常见数组
字符串, 对象数组,哈希表
三.时间复杂度与空间复杂度
时间复杂度
O()描述的是算法运行的时间与输入的数据之间的关系
n是nums中的元素个数,算法与n呈线性关系
空间复杂度
添加操作时间复杂度为O(n).
删除操作时间复杂度为O(n).
resize的复杂度分析(均摊时间复杂度0)
改操作时间复杂度:已知索引O(1),未知索引O(n)
查操作时间复杂度:已知索引O(1),未知索引O(n)
四.复杂度的震荡
同时进行addLast和removeLast的操作
造成了对数组的扩充后又认为过多而减少,减少后又扩容的现象。
解决方法:使用懒人方法(lazy),即size=capacity/4时,说明需要对数组的容量进行减少,此时再进行缩减。