常见数据结构
在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。-- "维基百科"
1. 链表
链表是一种非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的;链表由一系列节点组成,每个节点包含存储数据元素的数据域和存储下一节点地址的指针域。由于不必按顺序存储,链表在插入元素时可以达到O(1),但在查找某一元素时为O(n);
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理;但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大;
单向链表(链表链接方向单向,访问要从头部开始顺序读取);
双向链表(每个数据节点中都有两个指针,一个指向直接前驱,一个指向直接后继);
循环链表(表中最后一个节点的指针域指向头节点,整个链表形成一个环);
2. 队列
先进先出的线性表结构,插入在一端,删除在另一端;
3. 栈
先进后出的线性表结构,只能在一端进行插入和删除操作
4. 哈希表
它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度;这个映射函数叫做散列函数,存放记录的数组叫做散列表;
5. 堆
看作一棵树的数组对象,堆中某个节点的值总是不大于或不小于其父节点的值,堆总是一棵完全二叉树;根节点最大的叫大根堆,根节点最小的叫小根堆;
6. 优先队列
优先队列中,元素被赋予优先级,当访问元素时,具有最高优先级的元素最先删除;常采用堆数据结构来实现;
7. 字典树(非线性结构)
是哈希树的变种,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高;
8. 树(非线性结构)
二分查找树(BST,左子树节点都比根节点小,右子树节点都比根节点大);
平衡二叉树(AVL,它是一棵空树或它的左右两个子树的高度差(平衡因子:结点左子树的深度减去右子树的深度)的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树);
红黑树(自平衡的二叉查找树,规则1节点是红或黑,规则2根节点黑色,规则3每个叶子节点都是黑色的空节点(NIL),规则4每个红色节点的两个子节点都是黑色(不能有两个连续的红色节点),规则5从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点)(变色、旋转)
9. 图(非线性结构)
无向图(边没有方向的图);
连通图(在无向图中,若从顶点i到顶点j有路径相连(当然从j到i也一定有路径),则称i和j是连通的;如果是有向图,那么连接i和j的路径中所有的边都必须同向;如果图中任意两点都是连通的,那么图被称作连通图。如果此图是有向图,则称为强连通图);