队列的链式存储:
链表的头插入删除都没有问题
链表的尾部插入没问题,删除有问题
原因:在已知尾部节点时,插入之后,可以根据指针找到之后的尾部节点,删除之后,想要再次删除将会不知道尾部节点的位置。
因此队列和栈的实现的区别:
栈顶一定是链表的头部
队列的front用于删除:链表头
队列的rear用于增加:链表尾
队列的顺序存储结构:
package 队列.顺序存储结构;
import java.lang.annotation.Retention;
import java.util.Arrays;
/**
* 需要额外注意,队列空和满的区别:因此不能让整个数组都填充数据
* 判断满和空时采用求余符号
* @author 于盛
* elements 存储队列的数组
* rear 队列尾部在数组的索引
* front 队列头部在数组的索引
*/
public class Queue {
private int[] elements;
private int rear;
private int front;
public Queue() {
elements=new int[10];
rear=front=0;
}
public Queue(int size) {
elements=new int[size];
rear=front=0;
}
public boolean isFull() {
return (rear+1)%elements.length==front;
}
public boolean isEmpty() {
return rear==front;
}
public boolean add(int num) {
if(isFull()) {
System.out.println("队列已满");
return false;
}
rear=(rear+1)%elements.length;
elements[rear]=num;
return true;
}
public boolean delete() {
if(isEmpty()) {
System.out.println("队列已空");
return false;
}
int num=elements[front];
front=(front+1)%elements.length;
return true;
}
@Override
public String toString() {
return "Queue [elements=" + Arrays.toString(elements) + ", rear=" + rear + ", front=" + front + "]";
}
public void show() {
System.out.println(toString());
}
}