Iz E-študij, proste zakladnice študentskega znanja
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;
}
}