1.栈

  a.后进先出;

  b.虚拟机方法栈,

    运行中的java线程都会配备一个私有的方法栈,用来记录方法调用过程中的局部变量等重要信息。程序执行期间,JVM会维护一个当前活跃方法描述符,帧。同时JVM通过程序计数器PC来标示程序当前执行位置,方法栈最顶端的帧对应当前正在执行的方法实例,栈底的帧对应main方法实例,自底向上按执行顺序排列。每当有方法被调用,则将该方法的帧压入帧顶,执行完毕后,PC回复为之前的位置,然后该帧出栈,控制权交给新的栈顶帧。

    同时,JVM会通过方法栈将参数传递给方法,基本数据类型直接传递数值,对象实际传输为对象的地址。

  c.运用实例: 1).逆序;

        2).标示匹配,按顺序将开头标示入栈,遇到结尾标示时出栈同时对比是否匹配,全部出栈且都能匹配时所有匹配正确。

 

2.队列

  a.先进先出;

  b.Josephus环问题;

 

3.链表

  a.单链表,按现行排列顺序排列的一组数据节点。每个节点都是一个对象,它通过一个引用指向对应的数据元素,同时通过一个引用指向下一个元素。

  b.单链表元素具有线性次序,同时单链表长度不固定;

  c.链尾元素的删除时间为复杂度σ(n),链首为σ(1)。

 

4.位置

  a.按线性次序排列的一组位置构成一个列表。

  b.在列表中,每个位置都是相对于其前、后邻居而言。

  c.位置对应的元素次序改变并不影响位置本身,只有在对应元素删除时,对应位置销毁。

 

5.双端队列

  a.前后两端都支持删除插入操作的队列;

  b.双向链表,不仅有指向next元素的引用,同时有指向prev的引用;

  c.通常情况下,在首尾设置哑元节点,不存储实际数据;

  d.常数时间复杂度。