8种基本数据结构

1、哈希表(hash

哈希表也叫散列表,是一种可以通过关键码值(key-value)直接访问的数据结构,可以实现快速查询、插入、删除。

数组类型的数据结构在插入和删除时时间复杂度高,链表类型的数据结构在查询时时间复杂度高;而哈希表结合了数组和链表的优势

在jdk8中,Java中经典的HashMap,以数组+链表+红黑树构成

哈希函数在哈希表中起着关键作用,能够任意长度的输入转为定长的输出(哈希值)。通过哈希函数,能够快速的对数据元素进行定位。

哈希值并不是具有唯一性,在某些情况下Hash值会冲突,HashMap在Hash冲突时,会将元素在数组的位置上添加为链表元素结点,当链表长度大于8时,链表会转换为红黑树

2、队列(queue

类比水管,两端放开,一端入水,一端出水。

队列是一种特殊的线性表,他只允许表的前端进行删除操作,而在表的后端进行插入操作。

3、树(tree

树是一种非线性结构,由n(n>0)个有限节点组成有层次关系的集合

二叉树:每个节点最多含有2个子树

完全二叉树:

只允许最后一层有空缺且空缺在右边,即叶子节点只能在层次最大两层出现

对于一个任意节点,如果其右子树的深度为j,其左子树的深度为j或j+1。即度为1的点只能有0个或1个

满二叉树:除最后一层无任何子节点外,每一层上的所有节点都有两个子节点的二叉树。

平衡二叉树:也称AVL树,当且仅当任何节点的两颗子树的高度差不大于1的二叉树。Java中HashMap的红黑树就是平衡二叉树。

4、堆

堆可以被看成一个树的数组对象,具有如下特点:

  1. 堆是一棵完全二叉树

  1. 最大堆/大根堆:某个节点的值不大于父节点的值

  1. 最小堆/小根堆:某个节点的值不小于父节点的值

5、栈(stock)

栈可以比水桶,只有一端能够进出,遵循先进后出的原则。

栈先进的元素进入栈底,读元素的时候从栈顶取出元素。

6、数组(Array)

数组是一种线性表的数据结构,连续的空间存储相同类型的数据

优点:查询速度快

缺点:数组在创建时大小确定,无法扩容。数组只能存储一种类型的数据。添加、删除元素慢。

7、链表(LinkedList)

链表是一种线性表的链式存储方式,链表的内存是不可连续的,前一个元素存储的下一个地址中存储的不一定是下一个元素。链表通过一个指向下一个元素地址的引用将链表中的元素串起来。

  1. 单向链表:单项链表是最简单的链表形式,我们将链表中最基本的数据称为节点(node),每一节点包括数据块和下一节点的指针。

  1. 双向链表:故名思议,双向链表就是有两个方向的链表,同单向链表不同,双向链表中每一个节点不仅存储下一节点的指针,而且存储指向前一个节点的指针。通过这种方式,能够通过在O(1)的时间内通过目的节点直接找到前驱节点,但是同时会增大指针的存储空间。

  1. 循环链表:循环链表是另一种形式的链式存储结构。他的特点是表中最后一个节点的指针域指向头结点,整个链表形成一个环。

单循环链表:在单向链表中,把终端结点的指针域改为头结点或开始结点即可。

多重链的循环链表: 将表中结点链在多个循环上。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值