基本结构
队列主要的特性是先进先出(FIFO)
先看一下队列的基本结构
private Object[] data = null;
private int maxSize;// 队列的容量
private int front;// 头
private int rear;// 尾
data 用来存放队列中的值
初始化队列
public MyQueue(int max) {
// 初始化
this.maxSize = max;
data = new Object[max];
front = 0;
rear = 0;
}
front 和 rear 这个时候都指向队列的头部
判断队列是否为空,或者已满
应为开始的时候,front和rear都是指在头部,那只要front==rear这个队列就是空队列,当rear==maxsize的时候就代表,队列已经满了
// 判断队列是否为空
public boolean isEmpty() {
if (rear == front)
return true;
else
return false;
}
//判断队列是否满
public boolean isFull(){
if(rear == maxSize)
return true;
else
return false;
}
入队
入队的思路为,将新进来的数据放在队尾所指的位置,然后让对尾向后移动一位,队首永远指在队列的头部
// 入队
public void add(Object ob) {
if(isFull())
System.out.println("队列已经满了");
data[rear++] = ob;
}
出队
出队的思路为,我们把头指针指向位置的数据出队,然后头这个位置就空出来了,再让后面的挨个往前完成出队,当然这个方式的缺点也很明显,队列越长,一次出队越麻烦,用链表的话可以解决这个问题。
// 出队一个
public Object pop() {
if(isEmpty()){
System.out.println("空队,不能出");
return null;
}
Object MyRuturn = data[front];//要出队的项
for (int i = front; i < rear; i++) {
data[i] = data[i + 1];
}
rear--;
return MyRuturn;
}