就业冲刺之数据结构
数据结构
双向链表:
-
应用:
LinkedList
-
什么是双向链表:
- 双向链表是有若干个阶段构成,其中每个节点均匀3部分构成(前驱阶段,元素本身,后续节点),这些节点在内存中是游离状态的存在.
操作双向链表
- 双向链表是有若干个阶段构成,其中每个节点均匀3部分构成(前驱阶段,元素本身,后续节点),这些节点在内存中是游离状态的存在.
-
增删元素:(默认在尾部添加)将链断开,然后重新链接,从而实现添加/删除元素
- 增将元素转换成节点 (只有一个元素时:头尾都是指向同一个元素)add(int index,E ele)
- 在中间添加没有返回值,在尾部添加返回boolean
- 删除元素 remove(int index):E 将删除掉的节点元素返回
- 增将元素转换成节点 (只有一个元素时:头尾都是指向同一个元素)add(int index,E ele)
-
查找元素: get(int index):E
- 如果查找的元素下标小于元素长度的一半时,则是从头节点顺序查找元素
- 如果查找的元素下标大于元素长度的一半时,则是从尾节点逆向查找元素
- 双向链表的查询效率高于单向链表,原因是:双向链表是对半-二分法查找
-
修改元素 set(int index,E ele)
- 用新元素替换指定位置的元素,并且将原来的元素返回
面试题:
- 用新元素替换指定位置的元素,并且将原来的元素返回
-
ArrayList和LinkedList的区别
- 数据结构实现:ArrayList :基于数组,容量不够时候采用复制方式扩容。LinkedList:使用链表实现。
- 随机访问效率:ArrayList 比LinkedList在随机访问的时候效率要高,因为 LinkedList 是链表结构,需要依次查找元素,性能不高。
- 增加和删除效率 :LinkedList ⾸位操作具备很高效率。ArrayList 的头部性能稍差。
- 线程安全:ArrayList 和 LinkList 都是不同步的,不保证线程安全。
- 综合来说,需要频繁读取集合中的元素时,更推荐使用 Arrayist;而在头尾增删操作较多时,更推荐使用 LinkedList。ArrayList综合性能优秀,优选之!
- 时间复杂度: 数据结果/算法性能高低的不断依据
- O(1) -数组根据下标查询的时间复杂度
- O(n) ----单向链表的时间复杂度
- O(n^2) ----for循环俩层嵌套
-
注意点:
- 从JDK1.7开始,LinkedList的数据结构为双向链表
- 从JDK1.7之前,LinkedList的数据节后为双向循环链表
递归:
- 什么是递归:
- 是一种思想,运用到编程中体现为方法调方法本身
- 经典案例:
- 案例1:求阶乘
1! 1
2! 1*2 2*1!
3! 1*2*3 3*2!
4! 1*2*3*4 4*3!
5! 1*2*3*4*5 5*4!
n! n*(n-1)!
public class Demo(){
public static void main(String[] args){
System.out.println("请输入整数")
Scanner scanner = new Scanner(System.in)
int x =csanner.nextInt();
int resul = f(x)
System.out.println(result);
}
//求阶乘
public static int f(int n){
if(n==1)
return 1;
return n*f(n-1)<