打印循环队列

时间:2016-06-23 09:02:08

标签: java data-structures queue

我们如何在下面提到的代码中打印循环队列。 队列已满后,我们删除一个项目并插入下一个项目,该项目位于索引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();
}

}

6 个答案:

答案 0 :(得分:0)

gradleVersion = '2.12'

未经测试,但我认为这是正确的,或者至少提供了一般性的想法。

答案 1 :(得分:0)

只需使用while(我在上面的代码中,以避免再次打印System.out.print(“”+ arr [rear])。

答案 2 :(得分:0)

您可以尝试使用此代码!

for(int i=front+1 ; i!=(rear+1) ; i=(i+1)%arr.length)
{
   System.out.println(" "+arr[i]);
}

答案 3 :(得分:0)

对于那些寻找打印循环队列的人来说,接受的答案在两种情况下都失败了:

    当我们只有一个条目时,
  1. 将打印完整的队列
  2. 不打印最后一个元素
  3. 这是修改后的版本看看:

    假设队列中只有一个条目 10

    int[] queue = new int[5]
    queue = {10,0,0,0,0}
    
    front = 0;
    rear = 0;
    

    接受的答案输出将是:

     10,0,0,0,0
    

    我们需要检查何时休息,即一旦我们到达后方位置。

    要获得正确的结果,请使用以下内容:

    public void print() {
        if (!empty()) {
            int i = front;
            do {
                System.out.println(arr[i]);
                if(i==rear)
                    break;
                i = (i + 1) % (arr.length);
    
            } while (i != front);
        }
    }
    

    现在您的输出将是:

     10
    

    另请注意,我们正在迭代while (i != front)这允许我们打印最后一个元素。

答案 4 :(得分:0)

有两种情况:

  1. front == 0&Rear> = front

  2. 后部<前部

对于情况1 :(如果)

  
      
  • 检查后方> =前
  •   
  • 从前到后迭代i并打印
  •   

对于情况2 :(其他)

  
      
  • 从前到队列末尾迭代i,例如(Size-1)
  •   
  • 打印阵列!
  •   
  • 再次将i从0迭代到后方并打印数组
  •   

答案 5 :(得分:0)

正确的遮篷是:

void print(){
    if (!isEmpty()) {
        int i = front;
        do {
            System.out.print(" " + arr[i]);
            i = ++i % arr.length;
        } while (i != rear);
        
        if (front != rear) {
            System.out.print(" " + arr[rear]);
        }
    }
}