LinkedQueue.java

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje
import java.util.*;
 
public class LinkedQueue extends AbstractQueue
{ 
 
  private static class Node //privatni razred node
  { 
    Object object;
    Node next, previous;
 
    Node()  //konstruktor
    { 
      this.next = this.previous = this; //next in previous postaneta node,
    }                                      //tako da node kaze sam nase
 
    Node(Object object, Node next, Node previous)
    { 
      this.object = object;
      this.next = next;
      this.previous = previous;
    }
 
 
    // potrebujemo samo zaradi izpisa header v TestLinkedQueue
    public String toString()
    {
    	String s="Objekt: "+object;
    	s+="  Prednik: "+previous.object;
    	s+="  Naslednik: "+next.object;
    	return s;
    }
 
  }
 
  //private Node header = new Node(); 
  public static Node header = new Node(); // public static zaradi izpisa v TestLinkedQueue
  //private int size = 0;
  public static int size = 0; // public static zaradi izpisa v TestLinkedQueue
 
  public Object dequeue() //brisanje objekta
  { 
    if (isEmpty()) //ce je vrsta prazna vrze samo exception
       throw new NoSuchElementException("Prazna vrsta!");
    Object object = header.next.object; //vrnemo prvi objekt
    header.next = header.next.next; //naj ne kaze na prvega ampak na drugega
    header.next.previous = header; //pri drugem elementu/objektu naj previous kaze na header 
    --size;
    return object;
  }
 
  public Object enqueue(Object object)//dodajanje novega node
  { 
    Node p = header.previous;  // zadnji element
    header.previous = p.next = new Node(object,header,p); //na zadnje mesto vrinimo node ter
    ++size;                                               //popravimo naslove tako da p.next kaze na   
    return object;                                        //novi node ter header.previous na nov node
  }
 
  public Object getBack()
  { 
    if (isEmpty()) 
       throw new NoSuchElementException("Prazna vrsta!");
    return header.previous.object;
  }
 
  public Object getFront()
  { 
    if (isEmpty()) 
       throw new NoSuchElementException("Prazna vrsta!");
    return header.next.object;
  }
 
  public Iterator iterator()
  { 
    return new Iterator()  // anonimni notranji razred
    { 
      private Node cursor=header;//na zacetku kaze na prvi element header(Header je slepi element)
                                 //,ki vedno obstaja drugace bi se zmeraj morali sprasevati ce je
      public boolean hasNext()   // vrsta prazna etc...
      { 
        return cursor.next != header;
      }
 
      public Object next()
      { 
        if (cursor.next==header) //preveri ce je vrsta prazna, header je prvi element, ce bi bla 
           throw new NoSuchElementException("Konec vrste!");  //prazna bi header kazal same nase
        cursor = cursor.next;
        return cursor.object;
      }
 
      public void remove()
      { 
        throw new UnsupportedOperationException();
      }
    };
  }
 
  public LinkedQueue() //prazen konstruktor, ki ga moremo imeti da lahko tvorimo vrsto 
  {                    
  }
 
  public int size() //vrne velikost vrste
  { 
     return size;
  }
}
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja