2016-06-23 17 views
0

循環キューを以下のコードでどのように印刷するのですか? キューがいっぱいになり、1つのアイテムを削除し、インデックス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(); 
} 

}

+0

使い方についてペンまたは?デバッグを試してください。 – waltersu

答えて

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

テストし、私はそれが正しいことだと思う、または少なくとも一般的なアイデアを提供していません。 (I上記のコードでいる間

+0

はい、それはほとんど働いていますが、それは最も後ろにある要素の最後の要素を印刷していないことを除いて、例外です... System.out.print( "" + arr [rear]); .. while whileループ終了。 –

0

もう一度(」「+ [リア]をARR)System.out.printを出力しないようにするために使用します。

+0

while(i

0

をあなたはこのコードを試すことができます!

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