栈
栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶。它是后进先出的。对栈的基本操作只有push(进栈)和pop(出栈)两种,前者相当于插入,后者相当于删除最后的元素。
队列
队列是一种特殊的,特殊之处在于他只容许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端叫做对头。
链表
链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而 LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。
散列表
散列表(Hash table,也叫哈希表)是一种査找算法,与链表、树等算法不同的是,散列表算法 在査找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据 元素)的比较操作。
散列表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所査找的数据元素,因而必 须要在数据元素的存储位置和它的关键字(可用key表示)之间建立一个确定的对应关系,使每个 关键字和散列表中一个唯一的存储位置相对应。因此在査找时,只要根据这个对应关系找到给定 关键字在散列表中的位置即可。这种对应关系被称为散列函数(可用h(key)表示)。
用的构造散列函数的方法有:
即:h(key) = key 或 h(key) = a * key + b,其中 a 和 b 为常数。
- 数字分析法
- 平方取值法:取关键字平方后的中间几位为散列地址。
- 折叠法:将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为散列地址。
- 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址, 即:h(key) = key MOD p p < m
- 随机数法:选择一个随机函数,取关键字的随机函数值为它的散列地址,
即:h(key) = random(key)
红黑树
R-B Tree,全称是Red-Black Tree,又称为"红黑树",它一种特殊的二叉查找树。红黑树的每 个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。
红黑树的特性
- 每个节点或者是黑色,或者是红色。
- 根节点是黑色。
- 每个叶子节点(NIL)是黑色。[注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
- 如果一个节点是红色的,则它的子节点必须是黑色的。
- 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
排序二叉树
首先如果普通二叉树每个节点满足:左子树所有节点值小于它的根节点值,且右子树所有节点值 大于它的根节点值,则这样的二叉树就是排序二叉树。