队列的操作
队列的主要操作如下(char 类型队列示例):
- boolean enQueue(char data):在队尾插入一个元素
- char deQueue():删除并返回队首元素
- char front():返回队首元素
- int queueSize():返回队列中元素个数
- boolean isEmpty():返回队列是否为空
代码实现
需要注意的点见注释
package Queue;
public class ArrayQueue {
private char[] array;
private int size;
private int rear;
private int front;
public ArrayQueue(int capacity){
array=new char[capacity];
size=0;
rear=front=0;
}
public boolean enQueue(char data){
if(size==array.length){
return false;
}
else{
array[front]=data;
front=(front+1+array.length)%array.length;//循环数组处理下标加减时一定先加数组长度,再对数组长度的求余
size++;
return true;
}
}
public char deQueue(){
if(size==0){
return '!';
}
else{
size--;
char retu=array[rear];
rear=(rear+1+array.length)%array.length;
return retu;
}
}
public char front(){
if(size==0){
return '!';
}
else{
return array[(front-1+array.length)%array.length];
}
}
public int queueSize(){
return size;
}
public boolean isEmpty(){
return (size==0);
}
/*public void show(){
System.out.println("size"+size+" rear"+rear+" front"+front);
System.out.println(array);//使用字符数组名输出数组
}*/
}
简单测试
package Queue;
public class TestArrayQueue {
public static void main(String[] args){
ArrayQueue q1=new ArrayQueue(3);
q1.enQueue('1');
q1.enQueue('b');
q1.enQueue('c');
System.out.println("队头:"+q1.front());
for(int i=0;i<3;i++){
System.out.print("队尾取出"+q1.deQueue());
}
}
}
输出如下:
队头:c
队尾取出1队尾取出b队尾取出c
队列的其他实现方法
队列实现一共有三种基本方法:
- 基于简单循环数组实现
- 基于动态循环数组实现
- 基于链表实现
其中第一种方法也就是本文使用的方法,实现最简单,但是队列最大长度预先声名且无法改变。
其他两种方法则没有这个限制,这两种方法将在其他文章中进行记录。