数据结构与算法整理

整理了一些比较难的数据结构
数据结构的汇总知识点详见:https://blog.csdn.net/v_july_v/article/details/6543438

数据结构

  1. 链表
    https://mp.csdn.net/mdeditor/79977855

  2. 关于树:包括二叉搜索树BST,二叉平衡搜索树AVL,红黑树RBT,B-树,B+树,B*树
    https://blog.csdn.net/Sup_Heaven/article/details/39313731
    补充一部分:对AVL进行插入操作时,我们需要更新通向根节点路径上那些节点的所有平衡信息,而插入操作隐含着的困难在于,插入一个节点可能破坏AVL树的特性,因此需要对树进行简单的修正来做到,这个操作就是旋转。
    旋转分为两种:单旋转和双旋转,单旋转是指发生在“外边”的情况,双旋转是指发生在“内部”的情形。
    AVL树流行的一个变种是红黑树,对红黑树的操作可以在最坏情形下花费O(log N)时间。(这也是弥补了AVL树的插入复杂性)。
    红黑树是具有以下着色性质的二叉查找树:
    1.每个节点要么是红色,要么是黑色;
    2.根节点是黑色;
    3.所有的叶子节点(指的是NULL)都是黑色;
    4.如果一个节点是红色,那么它的子节点必须是黑色;
    5.从一个节点到一个NULL指针的每一条路径必须包含相同数目的黑色节点。
    掺入操作时,首先必须涂成红色,否则违反第4条,另外,如果插入的父节点为红色,那么违反第3条,因此比较进行必要的操作:颜色的改变和树的旋转。
    红黑树的查找,删除操作:https://blog.csdn.net/u011240877/article/details/53329023#红黑树的左旋右旋
    红黑树常问的问题:https://www.cnblogs.com/bethunebtj/articles/4853480.html
  3. 哈希表(散列表)
    也就是python中的字典或Perl中的hash表;
    哈希表能够实现很快的查找,因此在查找,匹配等问题中能够实现较小的复杂度,因此经常被用到,例如:
    https://leetcode.com/problems/two-sum/description/
    Given nums = [2, 7, 11, 15], target = 9,
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1].
    对每一个数构造一个哈希表对应的元素,其Key为加起来为总和的数,其值对这个数的index,因此就可以根据对应的值找到另一个值对应的index.

算法

  1. 查找排序算法
    一般使用顺序查找,二分查找,哈希表查找和二叉排序树查找。
    如果面试题是要求在排序的数组中(或者部分排序的数组中)查找一个数字或者统计数字出现的频率,那么可以尝试使用二分查找算法
    哈希表和二叉排序树的重点在于考察他们的数据结构而不是算法。
    一定要会写快速排序,并且熟知各种排序的时间复杂度,额外空间消耗。
  2. BFS,DFS 广度优先搜索与深度优先搜索
    http://www.cnblogs.com/skywang12345/p/3711483.html
    DFS深度优先搜索相当于树搜索中的先序遍历,就是先处理完一边的子节点再处理另一边;
    BFS广度优先搜索又称”宽度优先搜索”或”横向优先搜索”,以v为起点,由近至远,依次访问和v有路径相通且路径长度为1,2…的顶点。
    广度优先搜索例题:https://leetcode.com/problems/friend-circles/description/
    深度优先搜索例题:
  3. 有向图,无向图的邻接矩阵

猜你喜欢

转载自blog.csdn.net/zhouhong0284/article/details/79882085
今日推荐