Oppgave 1 og 2
import java.util.*; public class TabellKø<T> implements Kø<T> { private T[] a; // en tabell private int fra; // posisjonen til den første i køen private int til; // posisjonen til første ledige plass private T[] utvidTabell(int lengde) { T[] b = (T[])new Object[lengde]; // ny tabell // kopierer intervallet a[fra:a.length> over i b System.arraycopy(a,fra,b,0,a.length - fra); // kopierer intervallet a[0:fra> over i b System.arraycopy(a,0,b,a.length - fra, fra); fra = 0; til = a.length; return b; } public TabellKø(int lengde) { if (lengde < 0) throw new IllegalArgumentException("Negativ tabellengde(" + lengde + ")!"); lengde = lengde == 0 ? 1 : Integer.highestOneBit(lengde) << 1; if (lengde < 0) // kan få oversvømmelse her throw new IllegalArgumentException("For stor tabellengde!"); a = (T[])new Object[lengde]; fra = til = 0; } public TabellKø() // standardkonstruktør { this(8); } public void leggInn(T t) { a[til] = t; // ny verdi bakerst i køen til = (til + 1) & (a.length - 1); // øker med 1 if (fra == til) // sjekker om tabellen er full a = utvidTabell(2*a.length); // dobler tabellen } public T taUt() { if (fra == til) // sjekker om køen er tom throw new NoSuchElementException("Køen er tom!"); T temp = a[fra]; // tar vare på den første i køen a[fra] = null; // nuller innholdet fra = (fra + 1) & (a.length - 1); // øker fra med 1 return temp; // returnerer den første } public T kikk() { if (fra == til) throw new NoSuchElementException("Køen er tom!"); return a[fra]; } public int antall() { return (til - fra) & (a.length - 1); } public boolean tom() { return til == fra; } public void nullstill() { while (fra != til) { a[fra] = null; fra = (fra + 1) & (a.length - 1); } } public String toString() { if (til == fra) return "[]"; StringBuilder s = new StringBuilder(); s.append('['); s.append(a[fra]); fra = (fra + 1) & (a.length - 1); while (fra != til) { s.append(','); s.append(' '); s.append(a[fra]); fra = (fra + 1) & (a.length - 1); } s.append(']'); return s.toString(); } } // class TabellKø