常见的基础数据结构

1、栈

  • 特点:后进先出,先进后出(一端开口的水管,或子弹弹夹)

  • 一端开口(栈顶),一段封闭(栈底)

  • 数据进入栈模型的过程:压/进栈 数据离开栈模型的的过程:弹/出栈

2、队列

  • 特点:先进先出,后进后出(两端开口的水管)

  • 一端开口(后端),另一端开口(前端)

  • 数据从后端进入队列模型:入队列 数据从前端离开队列模型:出队列

3、数组

  • 特点:数组是一种查询快,增删慢的数据模型

  • 查询速度快:通过地址值和索引定位,查询任意数据耗时相同(元素在内存中是连续存储的)

  • 删除效率低:要将原始的数据删除,同时后面每个数据前移

  • 添加效率低:添加位置的每个数据后移,在添加元素

4、链表

链表

节点(链表中的每一个元素)

节点内存储具体的数据和下一个节点的地址值

  • 特点:链表中的节点是独立的对象在内存中是不连续的,每个节点包含数据值和下一个地址值

  • 链表查询慢:无论查询哪个数据都要从头开始查

  • 链表增删相对快(相对于数组)

双向链表相对于单向链表,查询会更快,在查询第N个元素的时候,先判断距离头节点较近还是距离尾节点较近,然后再从头向后或从后向前查询

5、树

  • 度:每一个节点的子节点数量(二叉树,任意节点的度<=2)

  • 树高:树的 总层数

  • 根节点:最顶层的节点

  • 左子节点:左下方的节点

  • 右子节点:右下方的节点

  • 根节点的左子节树,根节点的右子节树

节点内部结构

(若一个节点没有父节点或子节点就记为null)

 

5.1 二叉查找(排序/搜索)树

特点

  • 每一个节点上最多有两个子节点

  • 任意节点左子树上的值都小于当前节点

  • 任意节点右子树上的 值都大于当前节点

规则:小的存左边,大的村右边,一样的不存

弊端:节点左右字树的树高可能差距较大

5.2 二叉树的遍历方式
  • 前序遍历:

    从根节点开始,然后按照当前节点,子节点,子节点的顺序遍历

  • 中序遍历(最为重要且常用):

    从最左边的节点开始,然后按照子节点,当前节点,子节点的顺序遍历

  • 后序遍历:

    从最最左边的节点开始,然后按照子节点,子节点,当前节点的顺序遍历

  • 层序遍历:

    从根节点开始一层一层的遍历

5.3 平衡二叉树

规则任意节点左右字树的高度查不超过1

旋转机制:(触发时机:当添加一个节点后,该树不在为一个平衡二叉树)

  • 左旋:

    确定支点:从添加的节点开始,不断的往父节点找不平衡的节点

    步骤:以不平衡的点作为支点

    把支点左旋降级,变成左子节点

    晋升原来的右子节点

  • 右旋

    确定支点:从添加的节点开始,不断的往父节点找不平衡的节点

    步骤:以不平衡的点作为支点

    把支点右旋降级,变成右子节点

    晋升原来的左子节点

    (弊端 : 添加节点的时间浪费)

5.4 红黑树
  • 一种特殊的二叉查找树,红黑树的每一个节点都有存储位表示节点的颜色

  • 每一个节点可以是红或者黑;红黑树不是高度平衡的,它的平衡是通过”红黑规则“进行实现的

红黑规则

添加节点的规则

默认颜色:添加的节点默认是红色的(效率高)

红黑树增删改查的性能都很好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值