ArrayQueue
Iz E-študij, proste zakladnice študentskega znanja
ArrayQueue razširja razred AbstractQueue in je realizacija vrste s tabelo objektov.
Implementacija v Javi
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; } }
Primer uporabe
public class TestArrayQueue { public static void main(String[] args) { ArrayQueue q = new ArrayQueue(); System.out.println(q); // za izpis vrednosti front, back in capacity morajo biti ti atributi v ArrayQueue public static //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("JANEZ"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("MAJA"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("SIMON"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("PETER"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("MARJAN"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); System.out.println("Izlocen element: "+q.dequeue()); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); System.out.println("Izlocen element: "+q.dequeue()); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); System.out.println("Izlocen element: "+q.dequeue()); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); System.out.println("Izlocen element: "+q.dequeue()); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); System.out.println("Izlocen element: "+q.dequeue()); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("KATARINA"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("JANEZ"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("MAJA"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("SIMON"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); q.enqueue("SLAVICA"); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); System.out.println("Izlocen element: "+q.dequeue()); System.out.println(q); //System.out.println("Vrednosti: front: "+ArrayQueue.front+" back: "+ArrayQueue.back+ //" capacity: "+ArrayQueue.capacity); System.out.println(); System.out.println("q.getFront() = " + q.getFront()); System.out.println("q.getBack() = " + q.getBack()); System.out.println("q.size() = " + q.size()); System.out.println(); System.out.println("Izpis vseh: "); for (java.util.Iterator it=q.iterator(); it.hasNext(); ) System.out.println("\tit.next() = " + it.next()); System.out.println(); System.out.println("Brisanje vseh: "); for (;;) { q.dequeue(); System.out.println(q); } } }