数据结构(复习自用篇)

常见数据结构有:数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、堆(Heap)、散列表/哈希表(Hash)

·数组(Array:数组查询快,增删慢,适用于频繁查询,增删较少的情况):数组是有序元素的序列,在内存中的分配是连续的,数组会为存储的元素都分配一个索引(自增连续),访问数组中的元素通过索引进行访问,数组索引从0开始访问。

·链表(Linked List:数据量较小,需要频繁增加,删除操作的场景,查询操作相对较少):链表是由一系列节点Node(也可称元素)组成,数据元素的逻辑顺序是通过链表的指针地址实现,通常情况下,每个节点包含两个部分,一个用于存储元素的内存地址,名叫数据域,另一个则指向下一个相邻节点地址的指针,名叫指针域;根据链表的指向不同分为单向链表、双向链表、循环链表。

缺点:1.查询速度慢,查询需要从头部一直查询到尾部2.链表对于数组多了一个指针域的开销,内存相对占用会比较大

·栈(Stack:先进后出):是一种特殊的线性表,仅能在线性表的一端进行操作,栈顶允许操作,栈底不允许操作。

·队列(Queue:先进先出):和栈一样也是线性表,仅能在线性表的一端进行插入,另一端进行删除。

·树(Tree):由n(n>=1)个有限节点组成一个具有层次关系的集合。

特点:

  1. 每个节点有0个或多个子节点
  2. 没有父节点的节点称为根节点
  3. 每一个非根节点有且仅有一个父节点
  4. 除了根节点外,每个子节点可以分为多个不相交的子树
  5. 右子树永远比左子树大,读取顺序从左到右

二叉树:每个结点最多有两棵子树

平衡二叉树:

  1. 左子树上所有结点的值均小于或等于它的根结点的值
  2. 右子树上所有结点的值均大于或等于它的根结点的值
  3. 左右子树也分别为二叉排序树

红黑树(为了提高插入和删除操作的一种算法,最坏的时间复杂度:O(logn):

  1. 结点是红色或者黑色
  2. 根结点是黑色
  3. 所有的叶子结点都是黑色(叶子是NIL结点)
  4. 每个红色结点的两个子结点都是黑色(即不可能出现两个相邻的红色结点)
  5. 从任一结点到每个叶子的所有路径都包含相同数目的黑色结点

·堆(Heap): 堆可以看作一颗用数组实现的二叉树,堆根据“堆属性”来排序,其决定了树中节点的位置。n个元素的序列{k1,k2,k3......,kn}满足:kn<=k2n,kn<=k2n+1 或kn>=k2n,kn>=k2n+1,称之为堆,前者为小根堆,后者为大根堆。

堆的特性:如果一个节点的位置为k,那么它的父节点的位置为k/2,它的两个子节点的位置分别为2k和2k+1。根节点最大的堆叫做大根堆或最大堆,根节点最小的堆叫做小根堆或最小堆。

·散列表(哈希表Hash):根据键和值(key和value)直接进行访问的数据结构,通过key和value来映射集合中的一个位置,这样就可以很快的找到集合中对应的元素。散列表就是把key通过一个固定的算法即哈希函数转换成一个整型数字,然后将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势进行查找元素,所以查找的速度很快。

在散列表中,左边是个数组,数组的每个成员包括一个指针,指向一个链表的头部,当然这个链表有可能为空,我们根据元素的一些特征将元素分配到不同的链表当中去,也是根据这些特征,找到相应的链表,再从链表中找到这个元素。

·图(Graph):图是一系列顶点(元素)的集合,这些顶点通过一系列边连接起来组成图这种数据结构。顶点用圆圈表示,边就是这些圆圈之间的连线,顶点之间通过边连接。

图分为无向图和有向图: 有向图:边连接两个顶点,并且具有方向

无向图:边仅仅连接两个顶点,没有其他含义

·广度优先搜索算法(BFS):适用于搜索最短路径,浪费空间节省时间先搜索同一级的所有顶点,再搜索下一级顶点

·深度优先搜索算法(DFS):适用于搜索全部的解,浪费时间节省空间,搜索一条路径上的所有点,再搜索下一条路径。

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值