ArrayQueue.java

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje
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;
  }
}
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja