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.常数时间复杂度。