Iz E-študij, proste zakladnice študentskega znanja
import java.util.*;
public class ArrayQueue extends AbstractQueue
{
protected Object[] objects;
protected int front=0;
//public static int front=0; // za izpis spr. front v TestArrayQueue
protected int back=0;
//public static int back=0; // za izpis spr. back v TestArrayQueue
protected int capacity=16;
//public static int capacity=3; // za izpis spr. capacity v TestArrayQueue
public ArrayQueue()
{
objects = new Object[capacity];
}
public ArrayQueue(int capacity)
{
this.capacity = capacity;
objects = new Object[capacity];
}
public Object dequeue() //prvi element odstrani iz vrste, njegove naslednike pa prepise
{ //na zacetek in jih pobrise tam kjer so bili za prvim elementom
if (isEmpty()) //prej: | | |x1|x2|x3| | ----> Potem: |x2|x3| | | | |
throw new NoSuchElementException("Prazna vrsta!");
Object object = objects[front++];
if (2*front>=capacity)
{ for (int i=0; i<size(); i++)
objects[i] = objects[i+front];
back -= front;
front = 0;
}
return object;
}
public Object enqueue(Object object) //ce zmanjka prostora
{ //prej: | |x1|x2|x3|
if (back>=capacity) // hocemo dodati nov objekt "o"
{ //potem:|x1|x2|x3|o| | | | | | | | |...
Object[] temp = objects; //ter back povecamo za 1
capacity += 3;
objects = new Object[capacity];
for (int i=0; i<back-front; i++)
objects[i] = temp[i+front];
back -= front;
front = 0;
}
objects[back++] = object; //povecanje backa da kaze na nasljedno mesto
return object;
}
public Object getBack()
{
if (isEmpty())
throw new NoSuchElementException("Prazna vrsta!");
return objects[back-1];
}
public Object getFront()
{
if (isEmpty())
throw new NoSuchElementException("Prazna vrsta!");
return objects[front];
}
public Iterator iterator() //Iterator je je v vmesniku java.util.*
{ //iterator je en index, ki pripotuje vse veljavne idexe nase vrste
return new Iterator()
{
private int cursor=front; //na zacetku kaze na front
public boolean hasNext() //pogleda ali obstaja nasljedni tako da primerja cursor in back
{
return cursor<back;
}
public Object next()
{
if (cursor>=back) //ce je kurzor vecji od backa smo ze sli cez vrsto
throw new NoSuchElementException("Konec vrste!");
return objects[cursor++]; //ce to ni res vrnemo element ki se nahaja na kurzorju
}
public void remove()//remove ni toliko pomemben ampak ce v slucaju kdo klice vrnemo exception
{
throw new UnsupportedOperationException();
}
}; //ta podpicje je zelo pomemben !
}
public int size()// metoda ki vraca neko cifro (velikost vrste)
{
return back-front;
}
}