数据结构之线性表/队列/栈/树

数据

  • 数据项:一个数据元素可以由若干数据项组成。 (一个实体类的一个属性)
  • 数据对象:有相同性质的数据元素的集合,是数据的子集。 (该实体类对象)
  • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

结构

  • 逻辑结构: 数据对象中数据元素之间的关系
    • 集合结构
    • 线性结构
    • 树形结构
    • 图形结构
  • 物理结构:数据的逻辑结构在计算机中存储形式
    • 顺序存储 :挨着排列
    • 链式存储 :有地址指向下一个

1.线性表(顺序表/链表)

线性表:0个或者多个元素的有序列。

  • 顺序表(arrayList等):查找快, 增删慢(system.arraycopy)

    数组: 内存空间连续。 添加/删除 麻烦。

  • 链表: 用任意的存储单元存储数据,内存地址是可以不连续的,只能循环遍历查找。

    插入时,插入值先与后一个产生链表关系,再与前一个修改链表关系

    删除时,删除值先断后一个,再断前一个

  • 单循表:

  • 双向循表(LinkList): 前驱/后继, 查找效率比单链表快一倍

ArrayList与LinkedList区别: 顺序表与双链表的区别

cpu缓存:位于cpu与内存之间的临时存储器,解决cpu速度和内存速度的速度差异问题。

软件内存缓存:预先将数据写入到容器(list/map/set)等数据存储单元中。

内存缓存淘汰机制

  • FIFO:first in first out 先进先出
  • LFU:least frequently used 最不经常使用
  • LRU:least recently used 最近最少使用
    • 新数据插入到链表头部。
    • 当缓存命中(缓存数据被访问),数据移到头部。
    • 当链表满了,将链表尾部数据丢弃。

2.队列

队列先进先出表,运算受限的线性表。 队尾插入,队首取出。

生产者----> 缓存 (通常是通过队列实现)----> 消费者

循环队列:解决假溢出

假设循环队列容量N,并且预留一个空位置作为队列空/满/长度 判断标志

  • 队空: front == rear
  • 队满:(rear + 1)%N == front
  • 队列元素个数:(rear - front + N) % N

双端队列(Deque)

  • 具有队列和栈的性质的数据结构。
  • 元素可以从两端插入和删除。

优先级队列 (handle中的 MessageQueue:按照处理时间排队, PriorityQueue)

  • 和通常的栈/队列意义,每个元素含有一个优先级
  • 首先处理优先级最高的;如果优先级相同,则按照插入顺序处理。

3.栈

**栈:**后进先出表, 栈顶进行插入或者删除。

存储结构

  • 顺序结构:数组 (栈顶标识top)
  • 链式结构:链表

java中的stack是通过vector来实现的,设计被认为是不良的设计?

Stack --> Vector —> AbstractList (数组)

===>继承后,会拥有父类的add到某个位置的方法, 这不符合栈的特性。

栈的经典用法: 逆波兰表达式法

计算机采用的 后缀表达式

10 + (5-2)*3 + 10/2 ==> 10 5 2 - 3 * + 10 2 / +

操作数栈:10 5 …

操作符栈:+ - …

  • StackOverFlowError:栈溢出 (栈解决了程序的运行问题,解决如何执行/处理数据。负责运算逻辑

    无限递归调用方法。

    方法调用,进行入栈

  • OutOfMemoryError:堆内存溢出 (堆解决 数据存储的问题,怎么存放。 负责存储逻辑

4.树

特点:一个根, 一个或多个互不相交的子。(除了根节点,其他节点有且只有一个父节点,N个节点只有N-1条边)

  • 结点的度:结点的子树个数。

  • 树的度:树中所有节点最大的度。

  • 叶节点:度为0的节点。

二叉树

  • 度为2的树(树中所有节点中最大的度)
  • 子树有左右顺序之分
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值