gpt4 book ai didi

java - 用数组实现队列

转载 作者:行者123 更新时间:2023-12-01 09:30:32 25 4
gpt4 key购买 nike

我很困惑为什么我的队列不起作用,我相信入队和出队方法存在问题。但我不确定,我应该将初始数组大小设置为 8 来实现该类。一旦元素数量超过大小,数组大小将加倍。从数组开头删除一个元素后,需要将数组中的所有元素向左移动一位。编写一个测试程序,将 1 到 20 之间的 20 个数字添加到队列中,然后删除这些数字并显示它们。这是我的代码

    public class Queue {
private int[] elements;
private int size;
private int first;
private int last;
public static final int DEFAULT_CAPACITY = 8;

public Queue(){
this (DEFAULT_CAPACITY);
}
public Queue (int capacity){
elements = new int[capacity];
first = 0;
last = 0;
size = 8;
}
public void Enqueue(int v){ //fills queue and lengthens if necessary
if (last>=size){
int[] temp = new int[elements.length*2];
System.arraycopy(elements, 0, temp, 0, elements.length);
elements = temp;
}
elements[last]=v;
last++;

}
public int Dequeue(){
int output = elements[first];
System.out.print(output + " ");
while(last != 0){
for(int i = 0; i<last;i++){
elements[i]= elements[i-1];
}
last--;
}
return output ;
}
public boolean empty(){ // tests for empty queue


return last==first;

}
public int getSize(){
size=last;
return size;
}
}

这是测试器类。

    public class QueueTester {
public static void main(String[] args){
Queue q = new Queue();
q.Enqueue(1);
q.Enqueue(2);
q.Enqueue(3);
q.Enqueue(4);
q.Enqueue(5);
q.Enqueue(6);
q.Enqueue(7);
q.Enqueue(8);
q.Enqueue(9);
q.Enqueue(10);
q.Enqueue(11);
q.Enqueue(12);
q.Enqueue(13);
q.Enqueue(14);
q.Enqueue(15);
q.Enqueue(16);
q.Enqueue(17);
q.Enqueue(18);
q.Enqueue(19);
q.Enqueue(20);
while (q.empty()){
q.Dequeue();

最佳答案

while(last != 0){
for(int i = 0; i<last;i++){
elements[i]= elements[i-1];
}
last--;
}

删除 while 循环。如果您试图确保它不会使空队列出列,请进行 if 条件检查以确保大小 > 0。

 public int Dequeue(){
if (getSize() == 0) {
// throw an error or something
}
int output = elements[first];
System.out.print(output + " ");
for(int i = 0; i<last;i++){
elements[i]= elements[i-1];
}
last--;
return output ;
}

此外,您需要在测试器类中打印输出,并且我假设您希望在队列不为空时出列:

 while (!q.empty()){
System.out.println(q.Dequeue());

关于java - 用数组实现队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com