常用数据结构
1.数组、字符串 / Array & String
数组:
优点:
1.构建一个数组非常简单
2.能让我们在O(1)的时间里根据数组下标(index)查询某个元素
缺点:
1.构建时必须分配一段连续的空间
2.查询某个元素是否存在时需要遍历整个数组,耗费O(n)的时间(其中,n是元素的个数)
3.删除和添加某个元素时,同样需要耗费O(n)的时间
2.链表 / Linked-list
优点:
1.灵活地分配内存空间
2.能再O(1)时间内删除或者添加元素
缺点:
1.查询元素需要O(n)时间
3.栈 / Stask
特点:
后进先出(LIFO)
算法基本思想:
1.可以用一个单链表来实现
2.只关心上一次的操作
3.处理完上一次的操作后,能在O(1)时间内查找到更前一次的操作
4.队列
特点:
先进先出(FIFO)
常用的场景:
广度优先搜索
5.双端队列 / Deque
基本实现:
1.可以利用一个双链表
2.队列的头尾两端能在O(1)的时间内进行数据的查看、添加和删除
常用的场景:
实现一个长度动态变化的窗口或者连续区间
6.树 / Tree
树的共性:
结构直观
通过树问题来考察 递归算法 掌握的熟练程度
树的形状:
普通二叉树
平衡二叉树
完全二叉树
二叉收索树
四叉树
多叉树
特殊的树:红黑树、自平衡二叉收索树