-
什么是数据结构
数据结构是以一种特定的布局方式存储数据的容器,布局方式决定了数据结构对于某些操作是否是高效的,
如:ArrayList 查询效率高 增删效率低 因为底层是数组结构,有索引,查询比较方便,但是增删的话需要重新排序就是移动索引
LinkedList 是查询效率低,增删效率高 ,底层是linked双向链表,查询时只能从头到尾来查询,但是删除的话比较没有约束,随便删除, -
数据结构分类
数据结构可以分成逻辑结构和物理结构, -
逻辑结构
逻辑结构就是按照对象中的元素之间的相互关系分类,
1 集合关系:集合结构中数据元素除了属于同一个集合外,没有其他关系,
2 线性结构:元素之间是挨着的,一个接着一个,向一根线一样,常见的线性结构表 有栈,队列 ,串(一维数组),
3 树形结构:一对多的相互关系,不是一个挨着一个了,而是一个对应多个,如果有两个元素对应一个元素,那就是二叉树,树形结构表有二叉树,红黑树,b树,
4 图形结构:元素之间存在多对多的关系,比如像是网状型,
-
物理结构
物理结构是逻辑结构在计算机中真正的表达方式,也叫存储结构, -
顺序结构:
把数据元素放到地址连续的存储单元里面,常见的数组就是顺序结构,
顺序结构存在一定的弊端,在生活中一个排队中有人会插队,有人会突然离开,这个时候整个结构都会发送变化, -
链式存储结构
把数据元素存放到任意的存储单元里面,可以是连续或是不连续,每个单元中会存放一个指针指向数据元素的地址,这样通过指针来找到相关的数据元素位置,
-
线性结构
栈:是一种只能从一端存取数据,且数据遵循先进后出,后进先出的原则线性存储结构,
链表:是线性结构,有多个节点构成,是相互链接的线性顺序项目序列组成, 每个节点有两部分
数据部分:保存该节点的实际数据
地址部分:保存上一个或是下一个节点的地址
链表的种类 单向链表(正向遍历),双向链表 (可以前进和后退),双向循坏链表(头连接尾)。
特点有:节点在存储器上的位置是任意的,访问时只能通过头或是尾进入链表,并通过节点的指针向前或是向后查询,
优缺点:数据元素个数可以自由扩充,添加,删除等操作不必移动数据,只需要修改指针,修改效率高,因为是线性结构 在访问时按照顺序来访问,访问效率低,参考一下 双向链表定义 自行脑补单向链表和循坏链表, 单向链表:方向单一,访问要从头开始读取,添加随意位置, 双向链表:节点有两个指针,方向可正可反,
-
数组
是固定大小的结构,可以存储相同数据类型,数组中有索引,可以进行随机访问 查询效率高,但是增删需要先进行索引重新排序,比较费时,
-
队列
是一种特殊的线性表,特殊之处就是只允许在表的前端进行进行删除操作。在表的后端进行添加操作,就是对头就行删除,对尾进行添加,
操作就是 进队:将元素插入队列的末尾,出队 从头开始删除
一般用于管理多线程,用于排队系统, -
树形结构
存储具有一对多关系的数据元素的集合,
节点:存储数据元素的地方 节点的度:节点所拥有子节点的个数,深度:层次次数
二叉树:每个节点最多有两个子树,有左右之分,左小右大; -
哈希表 (散列表)
用于存储键和值的数据结构,将一个key键和一个数据元素存储位置建立对应关系,因此在查询时需要一个键来查询到数据元素,这样对应关系称为是散列函数 h(key)
特点就是查询快,
每个键对应哈希函数生成的值,找到索引下的值,