2010-12-02 22 views
0

En utilisant uniquement le pointeur externe arrièreComment ce code dans java serait changé pour en faire une file d'attente circulaire en utilisant la liste chaînée?

public void enqueue(Object element) 
// Adds element to the rear of this queue. 
{ 
    LLObjectNode newNode = new LLObjectNode(element); 
    if (rear == null) 
     front = newNode; 
    else 
     rear.setLink(newNode); 
    rear = newNode; 
} 

public Object dequeue() 
// Throws QueueUnderflowException if this queue is empty; 
// otherwise, removes front element from this queue and returns it. 
{ 
    if (isEmpty()) 
     throw new QueueUnderflowException("Dequeue attempted on empty queue."); 
    else 
    { 
     Object element; 
     element = front.getInfo(); 
     front = front.getLink(); 
     if (front == null) 
     rear = null; 

     return element; 
    } 
} 

public boolean isEmpty() 
// Returns true if this queue is empty; otherwise, returns false. 
{ 
    if (front == null) 
     return true; 
    else 
     return false; 
} 

Répondre

0
public void enqueue(Object element) 
... 
     rear.setLink(newNode); 
    rear = newNode; 
    rear.setLink(front); // make circular 
} 
... 
public Object dequeue() 
... 
    Object element; 
    element = front.getInfo(); 
    if (front.getLink() == front) { 
    // break circle for last element 
    front = null; 
    rear = null; 
    } else { 
    front = front.getLink(); 
    rear.setLink(front); // make circular 
    } 
... 
+0

Merci pour votre réponse, Martin. Mais comment serait-il fait avec juste le pointeur arrière? – Jason