数组时间复杂度


将1次resize均摊给2n+1;所以每次addLast操作,进行2次基本操作;均摊时间复杂度O(1)
复杂度震荡
addLast和removeLast操作同时考虑:
在n/2时,这个临界点,扩容和缩容;

解决方案:Lazy

当数组中的数据为实际的1/4时,再进行缩容操作

data.length / 2 != 0 //当数组元素;当data.length等于1时,数组不能分配0个大小;
栈和队列
栈是一种线性结构;
只能从一端添加元素,也只能从一端取出元素;这一端称为栈顶;
栈是一种后进先出的数据结构:LIFO
栈的应用
Undo操作(撤销)

栈的实现
栈的内容
Stack
1. void push(E) //入栈
2. E pop() //出栈
3. E peek() //取栈顶元素
4. int getSize() //返回栈大小
5. boolean isEmpty() //栈是否为空
接口定义栈:基于动态数组实现

栈的复杂度分析

栈的应用:括号匹配-编译器
LeetCode 20题有效的括号 valid Parentheses

然后出栈匹配,当栈中所有的数据也都出栈后,所以匹配结束;
注:栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素。
链表
1.特点
真正的动态数据结构
更深入的理解引用
更深入的理解递归
辅助组成其他数据结构
2.组成Linked List
数据存储在“节点”(Node)中
class Node{
E e;
Node next;
}

数组和链表比较

链表与递归
递归
本质,将原来的问题,转化为更小的同一个问题


解决链表中删除元素的问题


链表删除元素

本文详细介绍了数据结构中的数组、栈、队列、链表和树的相关概念,包括时间复杂度分析、栈的实现与应用、链表的删除操作、二分搜索树的遍历和删除节点的方法。此外,还探讨了集合、映射和优先队列的实现,特别提到了避免二分搜索树退化的策略。
最低0.47元/天 解锁文章
1786

被折叠的 条评论
为什么被折叠?



