我们如何在下面提到的代码中打印循环队列。在队列满了之后,我们删除一个项目,然后插入索引为0的下一个项目。我们如何打印它?。我们如何在下面提到的代码中打印循环队列。
class GQueue <T extends Object>
{
T[] arr;
int size;
int front;
int rear;
int length;
GQueue(int size)
{
this.size=size;
arr=(T[])new Object[this.size];
front=-1;
rear=-1;
length=arr.length;
}
void EnQueue(T data)
{
if(isFull())
{
System.out.println("Queue full");
return;
}
else if(isEmpty())
front=rear=0;
else
rear = (rear+1)%length;
arr[rear]=data;
}
void DeQueue()
{
if(isEmpty())
return;
else if (front==rear)
{
front=rear=-1;
}
else
front=(front+1)%length;
}
T peek()
{
return arr[front];
}
boolean isEmpty()
{
if(front==-1 && rear==-1)
return true;
else
return false;
}
boolean isFull()
{
if( (rear+1) % length==front)
return true;
else
return false;
}
void print()
{
for(int i=front;i<=rear;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
}
}
public class GenericQueue {
public static void main(String[] args) {
GQueue<Integer> gq = new GQueue<Integer>(10);
gq.EnQueue(1);
gq.EnQueue(2);
gq.EnQueue(3);
gq.EnQueue(4);
gq.EnQueue(5);
gq.EnQueue(6);
gq.EnQueue(7);
gq.EnQueue(8);
gq.EnQueue(9);
gq.EnQueue(10);
gq.print();
gq.DeQueue();
gq.EnQueue(11);
gq.print();
}
}
7条答案
按热度按时间daolsyd01#
没有经过测试,但我认为它是正确的,或者至少给出了大致的想法。
nr7wwzry2#
只需在上面代码中使用while(i,以避免再次打印System.out.print(““+arr[rear])。
5lhxktic3#
你可以试试这个代码!
nbewdwxp4#
对于那些寻找打印循环队列的人来说,接受的答案在两种情况下会失败:
1.当我们只有一个条目时,我将打印整个队列
1.不打印最后一个元素
这是一个修改版看看:
假设队列中只有一个条目10
接受的答案输出将为:
我们需要保持一个检查什么时候打破,也就是说,一旦我们已经到达后方的位置。
要获得正确的结果,请使用以下命令:
现在,您的输出将为:
还请注意,我们将迭代到
while (i != front)
,这允许我们打印最后一个元素。q3qa4bjr5#
将出现两种情况:
1.前== 0和后〉=前
1.后
对于情况1:(如果)
对于情况2:(else)
4szc88ey6#
实际上,正确的awnser是:
brgchamk7#
这是我的完整工作解决方案,通过代码沿着步骤进行了说明:
我使用String数组实现了一个循环队列(我将其命名为“words”),我将条件分开,并为以下每种情况编写了单独的循环:
1.当循环队列为空时(前==后&后== -1)
您无法打印任何内容,因此我在控制台上打印了“CQ empty
1.当前部〈后部时
我运行了一个for循环,打印了从front + 1到rear指向的元素(这里,words是数组的名称
1.当前部〉后部时||循环队列.isFull()==真
我的isFull()条件是:(前面==后面&&后面!= -1)||(front == -1 && rear == size - 1).所以我在这里实现了一个do while循环,在front == rear和front〈rear的情况下都可以工作.在实现这个循环之前,我尝试使用for循环,但是它根本不让我执行,因为它本身在开始时就满足了退出条件,因为它是一个入口控制循环.
注意:第三种情况下的代码实现也涵盖了第二种情况,但我编写第二种情况只是为了代码可读性和更容易初步理解。
我的最终代码