我正在尝试使用数组来实现队列 ADT 来完成家庭作业(如果由我决定,我会使用链表,但我猜教授希望我们学习新事物或 XD 的东西)。无论如何,我正在研究一种将元素添加到队列末尾的方法,如果它超出范围,同样的方法应该创建一个新的调整大小的数组,这就是我正在努力解决的方法( enqueue() 方法)。这是我的代码:
import java.util.Arrays;
public class Queue<T> implements QueueInterface<T> {
private T[] a;
private int sz;
public Queue(int capacity) {
sz = 0;
@SuppressWarnings("unchecked")
T[] tempQueue = (T[])new Object[capacity];
a= tempQueue;
}
public void enqueue(T newEntry) {
try {
for (int i=0; i<a.length; i++) {
if (a[i] == null) {
a[i] = newEntry;
break;
}
}
sz++;
}
catch (ArrayIndexOutOfBoundsException e) {
@SuppressWarnings("unchecked")
T[] tempQueue = (T[])new Object[a.length*+5];
a= tempQueue;
for (int i=0; i<a.length; i++) {
if (a[i] == null) {
a[i] = newEntry;
break;
}
}
}
}
public T dequeue() {
T result = a[0];
a[0] = null;
for (int i=1; i<a.length;i++) {
a[i-1] = a[i];
}
sz--;
return result;
}
public T getFront() {
return a[0];
}
public boolean isEmpty() {
for (int i=0; i<a.length; i++) {
if (a[i] != null) {
return false;
}
}
return true;
}
public void clear() {
for (int i=0; i<a.length; i++) {
a[i] = null;
sz--;
}
}
@Override
public String toString() {
return "Queue [a=" + Arrays.toString(a) + ", sz=" + sz + "]";
}
}
非常感谢大家的时间!!!