基本概念
队列是一种特殊的线性表,其插入操作只能在表的尾部进行,叫入队,这一端被称为队尾,删除操作只能在表的头部进行,叫出队,这一端被称为队首。没有数据元素的队列称为空队列。队列具有FIFO(先进先出)的特点,队列的底层数据结构可以用数组来实现。
队列的抽象数据类型
package ch03;
public interface IQueue {
public void clear();
public boolean isEmpty();
public int length();
public Object peek();
public void offer(Object x) throws Exception;
public Object poll();
public void display();
}
顺序队列
定义两个指针域头指针front和尾指针rear,front指向队列的队首元素位置,rear指向队尾元素的下一个存储单元,根据入队和出队操作实时的改变两个指针的位置即可,如图1所示。
代码实现
package ch03;
/*顺序队列*/
public class SqQueue implements IQueue {
private Object[] queueItem; //存储队列中的元素
private int front; //指向队首元素
private int rear; //指向队尾元素的下一个存储单元
private int maxSize;//最大存储个数
public SqQueue(int maxSize) {
queueItem = new Object[maxSize];
this.maxSize = maxSize;
front=rear=0;
}
//清空顺序队列
public void clear() {
front=rear=0;
}
//是否为空队列
public boolean isEmpty() {
return front==rear;
}
//获取队列长度
public int length() {
return rear-front;
}
//获取队首元素
public Object peek() {
if(isEmpty())
return null;
else
return queueItem[front];
}
//入队
public void offer(Object x) throws Exception {
if(rear==maxSize)
throw new Exception("队列已满!");
queueItem[rear] = x;
rear++;
}
//出队
public Object poll() {
if(isEmpty())
return null;
front++