计算机基础——数据结构

数据结构 - 幕布
数据结构
    • 中缀表达式求值:操作数栈和运算符栈(25+x)*(a*(a+b)+b)
    • 中转后:遇到数直接输出数字加空格……
    • 后缀表达式求值:25  x  +  a  a  b  +  *  b  +  *
  • 队列(rear指向最后元素的下一个)
    • 循环队列判断空:front==rear
    • 循环队列判断满:(rear+1)%maxsize==front
    • 穷举的字符串匹配算法:主串和子串指针都回溯。
    • KMP算法:发现当主串和子串失配后,若子串中失配的点前面有和子串开头的点吻合,那子串就回溯到相同的下一个位置。模式串和主串不匹配后,主串指针不动,模式串指针回溯到指定位置。next代表不匹配的前面和串最前面有几个相同的。next[1]=-1,next[0]=0,abaababaca,-1001123232,建议从-1开始.
    • 二叉树
      • 左孩子:2*i,右孩子:2*i+1,父节点:i/2向下取整
      • 在二叉树的第i层上至多有2i-1个结点(i≥1)
      • 深度为k的二叉树至多有2k-1个结点(k≥1)
      • 对任意一棵二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0= n2+1
    • 赫夫曼树
      • 路径:结点到结点的距离
      • 树的路径长度:根到每个结点的距离和
      • 带权路径:根到结点长度*权
      • 树的带权路径长度WPL:根到每个叶结点长度*权
      • 赫夫曼树:WPL最小的树。
        • 应用1:挑权最小的两个,从树的下面开始构造。
        • 应用2:编码。用二叉树,左孩子是0,右孩子是1,根据出现频率高低编码。这样编码,没有任何一个码是另一个码的前缀。
    • 生成树:无向。图有n个点,有n-1条边
    • B树:磁盘页对应b树的节点,只要那些包含元素地节点大小不超过磁盘页大小,树的高度决定访问磁盘次数(一次磁盘io后就进入内存进行比较)。它比二叉树的优势在于,只要树矮一些,就能提高查询效率,适合数据量大的查询。
    • B+树:B+树节点最右边的数字是子树中最大的数字,而且非叶子节点不带数据,只是索引。B树的数据放在叶子和非叶子,这样的话磁盘页大小相同时,树的高度更低,每次查询效率都一样。另外它的叶子节点形成链表,方便范围查询。聚簇索引中,叶子节点带数据,非聚簇索引中,叶子节点是指向数据的指针。
    • 存储
      • 邻接矩阵:无向图的邻接矩阵是对角对称,有向图的邻接矩阵不一定对称。
      • 邻接表:有向无向都是从0到n为每个点建一个链表,结点:data+指向连着的结点。如果边有权重,则结点加一个权重元素。它只知道它连着谁,不知道谁连着它,因此有逆邻接表。
      • 十字链表:一定是有向图。……
      • 邻接多重表:一定是无向图。……
    • 遍历
      • 深度优先:
        计算机基础——数据结构
      • 广度优先:
        计算机基础——数据结构
    • 无向图
      • 连通分量:非连通图的极大连通子图
      • 生成树:n从无向图的每一个连通分量中的一个顶点出发进行DFS或BFS遍历,可求得无向图的所有连通分量的生成树(DFS或BFS生成树)
      • 最小生成树:n-1条边。该生成树上所有边的权值和最小。
        • prim:总是找相邻的边
        • kruskal:总是找所有边中最小的
    • 有向图:
      • 最短路径:始点到每个点路径最短
      • dijkstra:D[i]:到每个点最短路径。S:已求得最短路径的终点的集合。……
    • 有向无环图:用深度优先搜索,找出是否有环。
  • 查找
    • 二叉排序树
      • 二叉排序树中序遍历得到由小到大排列。
      • 删除:没有孩子直接删除,有孩子,则用中序遍历时被删结点的后继结点代替被删结点的值,然后直接删除后继结点。
      • 查找效率:最好:O(log2n),最差:O(n)。折半查找的平均查找效率O(log2n)
    • 平衡二叉树
      • 插入时间复杂度:O(logn)。删除时间复杂度:O(logn)。删除和二叉排序树一样。
      • AVL树
      • 红黑树
        • 任何一个节点都有颜色,黑色或者红色
        • 根节点是黑色的
        • 父子节点之间不能出现两个连续的红节点
        • 任何一个节点向下遍历到其子孙的叶子节点,所经过的黑节点个数必须相等
        • 空节点被认为是黑色的
        • https://tech.meituan.com/redblack-tree.html
      • 调整:/,\,<、>。都转化成^。中间的在最顶上,左右各方一小一大。
    • 哈希处理冲突
      • 开放地址法:线性探测和二次探测法
      • 再哈希法:构造若干哈希函数
      • 链地址法
  • 排序
    • 各种排序最好最差时间复杂度
      计算机基础——数据结构