队列:只能一端进行出栈一端进行进栈。
队首:只允许进行出栈操作,可以进行删除。
队尾:只允许进行入栈操作,可以进行插入。
队尾进,队尾出,先进先出。
所以队列的实现也有两种形式,一种是数组实现队列,一种是用链表实现队列。
首先是用数组来实现队列。
使用数组队列,因为在删除时front会越来越大,所以最后会出现一种还有空间但是却显示无空间的现象。
解决方法:
构建循环队列,算法为:
判断是否队满:(rear+1)%a.length==front //如果相等的话则证明队列已满
rear=(rear+1)%a.length; //创建循环
实现代码:
1 public class Queue { 2 private static final int defaultSize = 10; 3 private Node[] a; 4 private int rear; 5 private int front; 6 Queue(){ //默认构造方法 7 a = new Node[10]; 8 rear = 0; 9 front = 0; 10 } 11 Queue(int n){ //指定队列长度的构造方法 12 a = new Node[n]; 13 rear = 0; 14 front = 0; 15 } 16 public boolean add(Node node){ //在队尾增加队列节点 17 if((rear+1) % a.length == front ) //检测该对列是否已经满了 18 return false; 19 else{ 20 a[rear] = node; 21 rear = (rear+1) % a.length; //构建循环队列 22 return true; 23 } 24 } 25 public Node remove(){ //删除对首节点 26 if(rear == front) 27 return null; 28 else{ 29 Node n = a[front]; 30 front = (front+1) % a.length; 31 return n; 32 } 33 } 34 public boolean isEmpty(){ //检测是否为空 35 if(rear == front) 36 return true; 37 else 38 return false; 39 } 40 public int size(){ //返回队列长度 41 return a.length; 42 } 43 }
时间: 2024-10-24 12:01:14