常用的数据结构
数组、链表、栈、队列、树、图、散列表、堆
树:仅有一个根节点,该节点没有前驱节点,其他节点仅有一个前驱节点且可以有两个后继节点
图:顶点和边,有向图和无向图
散列表:使用散列函数进行存储和查找
堆:一种特殊的树形结构,一般讨论的都是二叉堆。堆的特点是根节点的值是所有节点中最小的或最大的。并且根节点的两个子树也是一个堆结构。
说几种排序算法(快排、堆排、归并)
直接插入 寻找插入
折半插入 折半寻找插入
希尔排序 缩小增量直接插入
简单选择 选最小的
堆排序 大/小顶堆
冒泡 最大后移
快排 选第一个为基准,大移右小移左
归并 倒完全二叉树形状,最后合并时左右两边有序,用一个空数按序(左右两边比较)组装起来
基数 10个桶,若干趟分配+收集
BFS和DFS,二者区别
- 深度优先搜索DFS:1.从顶点v出发,访问v,2.依次从顶点v未被访问的邻接点出发进行深度遍历
- 广度优先搜索BFS:1.从顶点v出发,访问v,2.假设v最近一层的顶点依次是vi1,vi2,..vik,依次访问vi1,vi2,..vik的未访问的邻接点,3.重复步骤2直到没有未被访问的邻接点为止
- 区别:DFS常用于所有解或连通性问题,如马走日、是否有解;BFS常用于最优解问题,如最短路径问题,BFS运行过程中需要存储每层的信息,运行时存储量较大。