目录
数组(Array)
数组是指有有序的元素序列。最常用到的数据结构。
优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、数组的大小固定后就无法扩容了
2、数组只能存储一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。
链表(Linked List)
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表有单链表丶双端链表丶双向链表丶循环链表。(单链表也是leetCode或者面试喜欢出的数据结构,双指正算法和单链表更配哦。)
java实现:https://www.cnblogs.com/Y-oung/p/8886142.html
链表的优点:
链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;
缺点:
因为含有大量的指针域,占用空间较大;
查找元素需要遍历链表来查找,非常耗时。
散列表(Hash)
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
哈希表优点:
因为是数组和链表的组合,所以可以提供快速的插入操作和查找操作。
哈希表的缺点:
数组创建后难于扩展某些哈希表被基本填满时,性能下降得非常严重。这个问题是哈希表不可避免的,即hash冲突现象。
栈(Stock)
栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,栈顶允许操作,栈底不允许操作。取出元素叫出栈。
队列(Queue)
队列的特点是:先进先出。一端添加元素,在另一端取出元素。从一端放入元素的操作称为入队,取出元素为出队。
下图为队列的线性存储结构。
树(Tree)
它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
特点:
- 每个结点有零个或多个子结点;
- 没有前驱的结点称为根结点;
- 每一个非根结点有且只有一个父结点;
- 除了根结点外,每个子结点可以分为m个不相交的子树;
在leetCode种经常考察的就是二叉树了,配合二分查找。
二叉树的特点:
- 二叉树中,第 i 层最多有 2i-1 个结点。
- 如果二叉树的深度为 K,那么此二叉树最多有 2K-1 个结点。
- 二叉树中,终端结点数(叶子结点数)为 n0,度为 2 的结点数为 n2,则 n0=n2+1。
二叉树还可以继续分类,衍生出满二叉树(也称 完美二叉树)和完全二叉树。
如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。
如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。
堆(Heap)
还没有学习。 挖坑
图(Map)
还没有学习。挖坑
参考链接里面有关于我没有总结的数据结构。可自行总结。
参考链接
http://c.biancheng.net/view/3384.html
https://www.cnblogs.com/Y-oung/p/8886142.html