Java实现一个简单的队列---Queue

对于队列的应用的很多,但是我觉得理解队列最重要的是要记住,先进先出,一端插入,一端删除。

      (1)队列的定义:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,进行插入操作的端称为队尾, 进行删除操作 的端称为队头。

理解好定义,那么我们就通过代码再来分析一下:

public class Queue<E> {


private int front;//队头一端,只允许删除

private int rear;//队尾一端,只允许插入操作

private int max_size =16;

private Object[] data;

public Queue() {
this(10);
}
public Queue(int size){
if(size<0){
throw new IllegalArgumentException("队列初始化失败,原因是:"+size);
}
this.max_size = size;
front = rear = 0;
data = new Object[max_size];
}
//判断是否为空
public boolean isEmpty(){
return rear==front?true:false;
}
//入队
public boolean add(E e){
if(rear==max_size){
throw new RuntimeException("队列满了");
}else{
data[rear++] = e;
return true;
}
}
//返回队首元素,不删除元素
public E peek(){
if(isEmpty()){
return null;
}
return (E) data[front];
}
//出队
public E poll(){
if(isEmpty()){
throw new RuntimeException("队列为空");
}
else{
E e = (E) data[front];
data[front++] = null;
return e;
}
}
//长度
public int length(){
return rear-front;
}

}

接着来测试一下:

  1. public class Main {
  2. public static void main(String[] args) {
  3. Queue queue = new Queue();
  4. queue.add( "h");
  5. queue.add( "e");
  6. queue.add( "l");
  7. queue.add( "l");
  8. queue.add( "o");
  9. int length = queue.length();
  10. for( int i= 0;i<length;i++){
  11. System.out.println(queue.poll());
  12. }
  13. //System.out.println(queue.poll());
  14. }
  15. }
结果:

h
e
l
l
o

其实队列的实现是比较好处理的,关键是怎么处理好溢出的问题,因为这个会造成内存的浪费。

有不对的地方欢迎指出,谢谢。


猜你喜欢

转载自blog.csdn.net/qq_31461055/article/details/81035746