数据结构是元素之间的一种关系。有四种基本的数据结构。线性数据结构,树形数据结构,集合数据结构,图形数据结构
其中线性数据(元素之间一对一的关系)结构又细分为,数组,链表,队列,堆栈。先详细讨论下线性数据结构的特点
1.数组:array,关系数据库中数组的应用非常广泛,一个table就可以看作是一个二维数组。但是数组的访问效率较低,需要遍历所有数据才能找到满足条件的数据。
2.链表:数据元素的增加,删除可以在链表的任意位置完成(插队)
3.队列:只能在队尾插入,队首删除(
4.栈:只能在队首进行插入和删除的动作(子弹夹)
树形结构:树形结构有利于数据的存储和查找。数据元素之间一对多的关系,常见类型又树,比如二叉树,平衡二叉树,B+树
二叉树,最多有2个分支,而平衡二叉树,保证每个节点都有2个分枝,
B+树 常用于文件系统中:
(1)有n棵子树的节点含有n个关键字;
(2)所有的叶子节点包含了全部关键字的信息,及指向这些关键字记录的指针,且叶子节点本身按关键字大小自小到大顺序链接;
(3)所有非终端节点可以看成是索引部分,节点中仅含有其子树(根节点)中最大(或最小)关键字,所有B+树更像一个索引顺序表;
(4)对B+树进行查找运算,一是从最小关键字起进行顺序查找,二是从根节点开始,进行随机查
字典树是一种以树形结构保存大量字符串。以便于字符串的统计和查找,经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。具有以下特点:
(1)根节点为空;
(2)除根节点外,每个节点包含一个字符;
(3)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
(4)每个字符串在建立字典树的过程中都要加上一个区分的结束符,避免某个短字符串正好是某个长字符串的前缀而淹没。
散列表(hash table):
若结构中存在关键字和键值相等的记录,则该记录必定在hash 函数的存储位置上。由此不需要比较便可以直接取得所查记录。这个对应关系为hash function,按这个思想建立的表示hash表。
引用:http://blog.youkuaiyun.com/wypblog/article/details/8076324
最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。
注意:
- 堆中任一子树亦是堆。
- 以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。
下图分别给出几个最大堆和最小堆的例子:
