队列
1. 定义与特点
队列简称“队”,是一种操作受限的线性表,在表的一端进行插入操作,另一端进行删除操作。采用“先进先出”(First In First Out)
应用:多线程中等待队列和阻塞队列。
2. 队列操作与存储结构
2.1.1 队列操作
public interface Queue{
int getSize();//获取队列长度
boolean isEmpty();//判空
void enqueue(Object e)//入队
void dequeue();//出队
Object peek();//取队首元素
}
2.1.2 存储结构
1,顺序结构:基于数组
缺点:通过出队操作弹出队列后 ,front之前的空间不能再使用,这样会导致大量空间丢失
解决办法,使用循环数组
2,链式结构:基于链表
队列的链式储存可以使用单链表来实现
队首指针指向队首元素前的一个节点,即始终指向链表空的头节点,队尾指针指向队列当前队尾元素所在的节点
当队列为空时,队首指针与队尾指针指向空的头节点
3,双端队列
双端队列就是指两端都可以进行进队和出队操作的队列。将队列的两端你分别称为前端和后端,两端都可以入队和出队,其元素的逻辑结构仍是线性结构。
双端队列既可以用来队列操作,也可以用来实现栈操作。
输出受限的双端队列:即一个端点允许插入与删除,另一个端点只允许插入的双端队列
输入受限的双端队列:一个端点允许插入与删除,另一个端点只允许输入的双端队列
3.JAVA中的栈与队列
Stack类:栈类(过时)
public class stack<E> extends Vector<E>
Queue类:队列类
Deque(父接口为Queue):双端队列 栈操作使用
实现类:ArrayDeque (数组结构)
LinkedList(线性表,队列,栈皆可用)
使用
实现类:ArrayDeque (数组结构)
LinkedList(线性表,队列,栈皆可用)