0.1前言
本文共 2005字,建议预留 4分钟阅读。
1数组
数组是可以再内存中连续存储多个元素的结构。
int[] data = new int[100];data[0] = 1;
显而易见数组结构的优点有:
- 查询数据元素速度快
- 遍历数组方便
缺点有
- 大小固定
- 存储类型单一
- 改变少量数据需要调动大量数据
2 栈
栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。
栈就像是一个集装箱,先进入栈的数据在最里面。
3队列
队列也是线性表,和栈的最大区别是先进先出,就像火车过山洞一样,只不过过的不是火车,是数据
4链表
链表是有指针的数据,其逻辑是由指针方向决定的。
链表的优点:
链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
缺点:
占用空间较大;
非常耗时。
举一个例子假设我现在做一个游戏,里边的所有人都可以搓火球。但是我不知道具体那个人会发火球,如果不用链表,就得每个人都写一个火球函数
5树
- 每个节点有零个或多个子节点;
- 没有父节点的节点称为根节点;
- 每一个非根节点有且只有一个父节点;
- 除了根节点外,每个子节点可以分为多个不相交的子树;
如果满足这个结构的就是树。
二叉树
- 每个结点最多有两颗子树,结点的度最大为2。
- 左子树和右子树是有顺序的,次序不能颠倒。
- 即使某结点只有一个子树,也要区分左右子树。
满足以上三个要求的即使二叉树,二叉树查找的速度是指数式的,非常快。
扩展:
二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,这些数据结构二叉树的基础上衍生了很多的功能,在实际应用中广泛用到,例如mysql的数据库索引结构用的就是B+树,还有HashMap的底层源码中用到了红黑树。这些二叉树的功能强大,但算法上比较复杂,想学习的话还是需要花时间去深入的。
对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
6散列表
散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。
7堆
堆是一种比较特殊的数据结构,可以被看做树的数组对象,具有以下的性质
- 堆中某个节点的值总是不大于或不小于其父节点的值
- 堆总是一棵完全二叉树
8图
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
这里不展开图与堆.
图片来自网络