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

mac2022-06-30  18

队列实现的是一种先入先出(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; } }

转载于:https://www.cnblogs.com/torresliang/p/4773435.html

最新回复(0)