一、数据结构的类型简介
数据结构是计算机存储、组织数据的方式。
1. 数组
- 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问。
- 数组可以进行方便的查找,但是删除和增加相对来说复杂。数组一旦固定之后,就确定了,无法改变大小。
- 使用场景: 频繁查询,对存储空间要求不大,很少增加和删除的情况。
2. 队列
- 与数组不同的是,队列没有长度限制。但是队列只能在两端对数据进行操作。并且符合FIFT(first in first out)原则。
- 队列是一种线性表(所谓线性表就是除了首尾两个位置元素之外,其余中间的元素都是首尾相连的)
- 使用场景: 在多线程阻塞队列管理中非常适用
3. 栈
- 栈也是一种线性表结构,但是与队列不同的是,栈只能先进后出(LIFT)
- 使用场景: 栈常应用于实现递归功能方面的场景,例如斐波那契数列。
python实现:
class Asstack(object):
def __init__(self, size):
self.size = size
self.lst = []
self.top = 0
def push(self,item):
if self.top >= self.size:
raise ValueError('stack is ful')
self.top += 1 # 因为list中insert是插入在TOP指针之前的位置,所以这里先做了+1
self.lst.insert(self.top, item)
return self.lst
def pop(self):
if self.top == 0:
raise ValueError('stcak is empty')
self.lst.pop() # lst.pop的返回值是删除的元素,可以选择接收
self.top -= 1
return self.lst
4. 链表
链表是物理存储单元上非连续的、非顺序的存储结构。数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
- 需要注意的是,链表尾的指针需要指向NULL,将意味遍历结束。
- 链表的优点是只要改变指针域就能轻松实现插入和删除操作。
- 缺点是要查找某个元素可能需要对链表遍历一次。
双链表就是结构体内部存在两个结构体指针,循环链表就是指某一指针指向头指针多指向数据域。双向循环链表如下所示:
5. 散列表
hash函数就是根据key计算出应该存储地址的位置,而散列表,又称为哈希表是基于哈希函数建立的一种查找表。
散列表是数组和链表的结合,因此兼具两者的特点。
6. 树
树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
- 每个节点有零个或多个子节点;
- 没有父节点的节点称为根节点;
- 每一个非根节点有且只有一个父节点;
- 除了根节点外,每个子节点可以分为多个不相交的子树;
在日常的应用中,我们讨论和用的更多的是树的其中一种结构,就是二叉树。
二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。
扩展:
二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,这些数据结构二叉树的基础上衍生了很多的功能,在实际应用中广泛用到,例如mysql的数据库索引结构用的就是B+树,还有HashMap的底层源码中用到了红黑树。
7. 堆
堆是一种比较特殊的数据结构,从形状上看就是一颗完全二叉树,具有以下的性质:
- 堆中某个节点的值总是不大于或不小于其父节点的值;
- 堆总是一棵完全二叉树。
可分为大顶堆和小顶堆,大顶堆是指父节点永远比子节点大,反之则为小顶堆。
常见的堆有二叉堆,斐波那契堆等
8. 图
由一系列节点和边连接组成。可以分为有向图,无向图,常见的表示方式有邻接矩阵和邻接链表。
度,权,连通图的概念
度是指从顶点引出的边的数量,如果在有向图中,度可以分为入度和出度。权是指每条边可以占有一定的权重,一个无向图中每个顶点从所有其他顶点都是可达的,则称该图是连通的;如果一个有向图中任意两个顶点互相可达,则该有向图是强连通的。
- 图的广度搜索(广度优先遍历)
- 图的深度搜索(深度优先遍历)
二、 资料参考
https://blog.youkuaiyun.com/yeyazhishang/article/details/82353846
https://blog.youkuaiyun.com/iva_brother/article/details/84036385