版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zgkxzx/article/details/80296153
1.数组
优点
插入快缺点
查找慢,删除慢,大小固定
2.有序数组
优点
比无序的数组查找快缺点
插入慢,删除慢,大小固定
二分查找
通过比较大小来判断左右两边的方向再查找,查找的对象一半一半的减少。
3.栈
优点
提供后进先出的存取方式缺点
存取其他项很慢
利用:字符串倒序 算术表达式解析z
4.队列
优点
提供先进先出的存取方式缺点
存取其他项很慢
5.链表
优点
插入 删除快缺点
查找慢
5.1 单链表
5.2 双端链表
双端链表的操作与单链表操作区别除了可以从头部插入数据和删除数据、查找数据以及实现关键数据项的删除等,还可以实现从链表尾部添加数据
5.3 有序链表
元素有顺序
5.4 双向链表
前后两个指针
6.树
6.1 二叉树
优点
插入 删除 查找 都快缺点
删除算法复杂
概念
- 根节点
- 子节点
- 叶子节点
- 左子树
- 右子树
基本方法
- 插入
- 删除
- 查找
- 遍历
- 前序 根 左 右
- 中序 左 根 右
- 后序 左 右 根
二叉树如果插入随机数,那么插入删除等操作比较快,但是如果是有序的数据,那么它会退化成链表了,性能不好,这里就引入了平衡树。
6.2 红黑树(平衡树)
优点
插入 删除 查找 都快缺点
算法复杂
特征
- 节点要有颜色
- 在插入和删除时候,要遵从保持颜色不同的排序的规则
规则
- 每个节点不是红色就是黑色
- 根节点一定是黑色
- 如果节点是红色,那么它的子节点必须是黑色
- 从根的到子节点或空节点的每天路径必须包含相同数目的黑色节点
操作
- 颜色变化
- 旋转
6.3 2-3-4 平衡树
优点
插入 删除 查找 都快缺点
算法复杂
7.哈希表
优点
插入 提取关键字 都快缺点
删除慢
数组下标的计算算法
- 开放地址法
- 线性探测 发生碰撞 地址加一 直到有位置
- 二次探测 增加探测的步长
- 再哈希 第一个hash发生碰撞后,再调用第二个hash方法hash,两个不能相同
- 链地址法
8.堆
是一种特殊的二叉树
优点
插入 删除 都快 对大数据存取很快缺点
其他数据很慢
特点
- 它是完全的二叉树,除了树的最后一层节点不需要是满的,其他的每一层从左到右都完全是满的
- 它常常是用一个数组实现
- 堆中的每一个节点都是满足堆的条件,父节点的关键字要大于所有子节点
插入
堆还可以看成一个完全二叉树,每次总是先填满上一层,再在下一层从左往右依次插入。堆的插入步骤:
- 将新元素增加到堆的末尾
- 按照优先顺序,将新元素与其父节点比较,如果新元素小于父节点则将两者交换位置。
- 不断进行第2步操作,直到不需要交换新元素和父节点,或者达到堆顶
- 最后通过得到一个最小堆
删除
堆的删除操作与插入操作相反,插入操作从下往上调整堆,而删除操作则从上往下调整堆。
- 删除堆顶元素(通常是将堆顶元素放置在数组的末尾)
- 比较左右子节点,将小的元素上调。
- 不断进行步骤2,直到不需要调整或者调整到堆底。
9.图
优点
对现实世界建模缺点
算法复杂
是否有方向
- 有向图
- 无向图
至少有一条路径连接所有顶点
- 连通图
- 非连通图
是否有权值
- 带权图
- 无权图
搜索算法
- DFS(深度优先搜索) 使用栈实现
- BFS(广度优先搜索) 使用队列实现