数据结构
uwupu 啦啦啦啦啦

静态链表

image

right为链表每个元素的后继下标;

双向静态链表

image

双向链表,有前驱有后继。

8的后继为0,表示这是一个循环链表

​ 56 9 12 23 49 20 16 62

0 > 1 >2>3> 4 >5 >6 >7 > 8 > 0

n个节点可以构成不相似的二叉树的数量有:

bn表示n个结点构成的不同形态的二叉树的数量。
$$
b_n=
\begin{cases}
b_0=1\
b_n=\sum_{i=0}^{n-1}b_ib_{n-i-1}
\end{cases}
$$
结论:
$$
b_n = \frac{1}{n+1}·C^n_{2n}
$$

vertex n.顶点

重连通图

即,任意两个顶点之间含有不止一条通路,这个图就称为重连通图

关节点:如果删除某个顶点及其相关联的边后,原来的图被分割为两个及以上的联通分量,则称该顶点为无向图的一个关节点。

判断一个重连通图

判断图中是否有关节点,没有则表示图为重连通图。

拓扑算法

n: 拓扑序列

拓扑排序:从某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

Dijkstra算法

带权单源最短路径算法。

图来源:https://blog.csdn.net/xiaoxi_hahaha/article/details/110257368

image

Floyd算法

带权最短路径

查找表

静态查找表和动态查找表

静态查找表:只进行查找操作,不改动表中数据元素;

动态查找表:在查找的同时进行数据的增加和删除操作。

关键字

表中元素的属性,可以作为关键字。比如学生有姓名、学号、年龄等属性,这些都可以作为关键字。

主关键字和次关键字

主关键字:唯一标识一个数据元素,比如学号;

次关键字:与主关键字相反,如姓名、年龄。

一些名词

  • 静态查找树
    • 次优查找树
    • 二叉排序树

哈希表

http://c.biancheng.net/view/3437.html

哈希函数

  • 直接定值法:H(key) = keyH(key) = a * key + b

  • 数字分析法:取出每个值中不同部分较多的地方作为哈希地址;

  • 平方取中法:对关键字进行平方操作,取中间几位作为哈希地址;

  • 折叠法:将关键字分为几个部分,然后取这几部分的叠加和作为哈希地址;

  • 除留余数法:若已知哈希表长度m,取一个不大于m的数字p,然后对关键字进行取余运算

    • H(key) = key % p
  • 随机数法:取关键字的一个随机函数值作为哈希地址,即H(key) = random(key);

选择一个哈希函数

需要注意的地方:

  • 若关键字长度不等,可以用随机数法;

  • 关键字位数多,折叠法或数字分析法;

  • 关键字位数较短,平方取中法;

  • 哈希表大小已知,可以选择除留余数法;

  • 关键字分布情况;

  • 查找表的查找频率;

  • 计算哈希函数需要的时间;

处理冲突

  • 开放定址法:H(key) = [ H(key) + d ] MOD m;

    • $$
      H(key) = [ H(key) + d ]\ %\ m
      $$

    • m为哈希表表长

    • d的取值

      • 线性探测法:d = 1,2,3, …, m-1
      • 二次探测法:d=12, -12, 22 , -22, 32 …
      • 伪随机数探测法:d=伪随机数
  • 再哈希法:

    • 若发生冲突,再使用另一个哈希函数进行计算,直到冲突不再发生;
  • 链地址法

    • 将处于一个地址的值放在一个链表中;
  • 建立一个公共溢出区

    • 建立两张表,一张基本表,一张溢出表;
    • 将哈希函数结果产生冲突,就将数据放到公共溢出区;

B-树 (B-Tree)

名字

这里不是B减树,B-树,指的就是B树。换言之,B树,就是B-树。

B+树是B树的plus,不存在B减树;

满足下列要求的m叉树

  1. 树中每个结点至多有m个孩子结点(即,至多有m-1个关键字)

  2. 每个结点的结构如下:

    image

    \

    \

    image

  3. 除根节点外,其他结点至少有⌈m/2⌉个孩子结点;

  4. 若根节点不是叶子节点,则根节点至少有两个孩子结点,(即根节点没有只有一个孩子结点的情况);

  5. 所有的叶子节点都在同一层上,即B树是所有节点平衡因子均等于0的多路查找树

  6. 除根节点外,其他结点都包含n个key,这里⌈m/2⌉-1 <= n <= m-1
    $$
    \lceil m/2 \rceil - 1 \leq n \leq m-1
    $$

 评论