数据结构整理

1.四类基本数据结构
集合、线性结构、树形结构、图状结构
2. 两种存储结构
顺序存储:

  • 逻辑上相邻物理也要相邻
  • 插入删除要动元素
  • 可以随机存储

链式存储:

  • 指针域+数据域
  • 物理上可以不相邻
  • 插入删除不用移动元素
  • 链表分为线性链表、循环链表、双向链表

3. 栈与队列
栈:后进先出,LIFO 栈顶是top指针,进出都在栈顶
队列:先进先出,FIFO 队尾插,队头删
4.二叉树

  • 性质1. 第i层最多2^(i-1) 个结点
  • 性质2. 深度k最多2^k - 1个结点
  • 性质3. 最后一层结点数=度为2的结点数+1
  • 先序遍历:根-左-右
  • 中序遍历:左-中-右
  • 后序遍历:左-右-中
  • 赫夫曼编码:从权值最小的开始当孩子,建树、01编码
    5. 图
  • 连通图的生成树是极小连通子图,在生成树上加一条边,一定成环
  • 入度和=出度和
  • 邻接矩阵、邻接表
  • DFS、BFS
  • 最小生成树:prim算法、Kruskal算法
  • prim:每次选到已连通所有点中最小的点去连通
  • 克鲁斯卡尔算法:每次都找最小代价的边
  • 拓扑排序,从偏序得出全序
  • 偏序是自反的、反对称的、传递的。
  • 每个x,y都存在偏序关系,就是全序
  • 拓扑排序可以用于流程图
  • 单源点最短路径:Dijkstra迪杰斯特拉算法:每次都找离源点最近的点
  • 每对顶点间的最短路径:弗洛伊德算法:插点法,判断两点间距离小还是插入一个点距离小
    6. 查找
    折半查找:查找过程类比于树
    索引顺序查找:又称分块查找,弄成分块有序的,索引表放每块里的最大值。找块可以用折半或顺序、块中无序只能顺序。
    二叉排序树:左子树小于根结点、右子树大于根结点
    平衡二叉树:对二叉排序树进行调整,左右子树深度差不超过1
    B树、B+树、B-树

7. 排序
冒泡排序:两两交换,每轮会把最大的放到最后面
选择排序:每次选剩余中最小的放到还未排的序列的最前面
快速排序:把一个数组分成两个,找一个值,小于它放这个数前,大于他放这个数后。递归实现
归并排序:把数组分成两个子数组进行分别排序,也是递归的感觉,先分解再排序
堆排序:大顶堆或者小顶堆,从叶子结点开始往上换,从根结点出来。
插入排序:每个数都找自己的位置插进去。
希尔排序:基于插入排序的快速排序算法。根据步长把数组分组,然后每个组内进行插入排序
基数排序:将数切割,进行每一位的比较,可以是最低位优先法,也可以是最高位优先法。

排序算法 最好时间复杂度 最坏时间复杂度 空间复杂度 内部or外部排序
冒泡排序 O(n) O(n^2) O(1) 内部排序
选择排序 O(n^2) O(n^2) O(1) 内部排序
插入排序 O(n) O(n^2) O(1) 内部排序
基数排序 O(nk) O(nk) O(n+k) 外部排序
希尔排序 O(nlogn) O(1) 内部排序 不稳定
归并排序 O(nlogn) O(nlogn) O(1) 内部排序
快速排序 O(nlogn) O(n^2) O(1) 内部排序 不稳定
堆排序 O(nlogn) O(nlogn) O(1) 内部排序 不稳定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值