数据结构(二):队列的Java实现

队列实现的是一种先入先出(FIFO)策略。队列中的INSERT操作称为ENQUEUE,DELETE操作称为DEQUEUE。队列的先入先出特性如同生活中的排队现象一样。因为队列既有队头,又有队尾,所以在实现是需要一个数组和两个分别指向对头和队尾的属性。关于队列属性,现有以下说明:

1.队头属性指向队头元素所在位置,队尾属性指向队尾元素的下一个位置,即下一个元素即将插入的位置。
2.为防止队列的队头移动会引起数组前端空间的浪费,一般设置队头和队尾两属性循环移动。
3.当队尾元素加一取模等于队头元素时,说明此队列存储空间已满。
4.当队头元素和队尾元素相等时,说明此队列为空。

以下Java实现了队列,此队列的初始容量初始化时可自动设置,当队列已满时,队列将自动扩容为先前容量的二倍,并自动实现元素复制。

import java.lang.reflect.Array;
import java.util.Arrays;

public class ListDemo<T> {
    private T[] array;
    private int head = 0;
    private int tail = 0;
    private int size = 0;
    private Class<T> T;

   @SuppressWarnings("unchecked")
   public ListDemo(Class<T> T, int size) {
	   this.size = size;
	   this.T = T;
	   this.array = (T[]) Array.newInstance(T, size);
   }

   public void enqueue(T input) {
	   if (tail == size)
		   tail = 0;
	   array[tail] = input;
	   if (++tail % size == head) {
		   size *= 2;
		   array = Arrays.copyOf(array, size);
	   }
   }

   public T dequeue() {
	   if(head == size)
		   head = 0;
	   if(head == tail)
		   return null;
	   else
		   return array[head++];
   }

   public boolean empty() {
	   if (head == tail)
		   return true;
	   else
		   return false;
   }

}
posted @ 2015-08-31 16:47  torresliang  阅读(695)  评论(0编辑  收藏  举报