Stabler, er og Lister I. STEL OG QUEUE DT I.1 DT I.2 rray implemetasjo I.3 Liket-Liste implemetasjo II. DQUEUE DT III.IMPLEMENTSJON V EN DT MED EN NNEN DT Kap. 3 (kursorisk: 3.1.3, 3.2.3, 3.4; utatt: 3.2.4, 3.5) i-120 : H-98 5. Stabler og er: 1 DT er /** LIFO kø av vilkårlige Objekter * S.push(o).peek() == o ; S.push(o).pop() == o & S */ public iterface Stack { /** setter i et ytt objekt på pe * @param o Objektet som skal iettes */ void push(object o); /** returerer pe av stabel * @retur Objektet som ble isatt * @exceptio EmptyExc hvis stabel er tom*/ Object peek() throws EmptyExc; /** fjerer og returerer pe * @retur peek() og fjer de fra stabel * @exceptio EmptyExc hvis stabel er tom*/ Object pop() throws EmptyExc; /** sjekker om stabel er tom */ boolea empty(); /** FIFO kø av vilkårlige Objekter * S.equeue(o).frot() = S.frot() hvis!s.empty();ellers * S.equeue(o).dequeue() Q = S.dequeue() Q.equeue(o) */ public iterface Queue { /** setter i et ytt objekt på slutte * @param o Objektet som skal iettes */ void equeue(object o); /** returerer første Objektet i køe * @retur Objektet som har vært i køe legst * @exceptio EmptyExc hvis køe er tom*/ Object frot() throws EmptyExc; /** fjerer og returerer første Objektet * @retur frot() og fjer de fra køe * @exceptio EmptyExc hvis køe er tom*/ Object dequeue() throws EmptyExc; /** sjekker om køe er tom */ boolea empty(); i-120 : H-98 5. Stabler og er: 2
Egetlig public iterface Samlig { /** atall Objekter i samlige */ it size(); /** sat hviss ige Objekter */ boolea empty(); /** samlig med mulighet for aa sett i/fjere */ public iterface LiFi exteds Samlig { /** setter i et ytt objekt * @param o Objektet som skal isettes */ void setti(object o); /** returerer et Objektet fra køe * @retur Objektet som skulle fjeres */ Object frot() throws EmptyExc; /** fjerer og returerer frot Objektet * @retur frot() og fjer de fra køe */ Object het() throws EmptyExc; public iterface Stack exteds LiFi { /** setti(o) tilsvarer push(o) het() tilsvarer pop() */ public iterface Queue exteds LiFi { /** setti(o) tilsvarer equeue(o) het() tilsvarer dequeue() */ i-120 : H-98 5. Stabler og er: 3 public class Stab IMPLEMENTS STK { private Object[] r; private it oe, max=10; Stabel med rray public Stab() { r= ew Object[max]; oe= -1; public void push(object o) { if (oe=max-1) { Object[] temp= ew Object[max]; opy(r, tab); max= 2*max; r= ew Object[max]; opy(tab,r); oe++; r[oe]= o; public Object pop() oe else { oe--; retur r[oe+1]; public Object peek() else retur r[oe]; public boolea empty() { retur oe < 0; public it size() { retur oe+1; private opy(object[] fra, Object[] til) { for (it k=0; k<fra.legth; k++) til[k]= fra[k]; O(1) oe r[oe] er pe av stabel hvis oe+1 = atall eter > 0 max = r.legth: max > oe >= -1 r 0 1 2 3 4 oe oe r 0 1 2 3 4 pop() push(x) r 0 1 2 3 X 4 i-120 : H-98 5. Stabler og er: 4
Queue med rray public iterface Queue { void equeue(object o); Object dequeue(); Object frot(); boolea empty(); equeue(d) D dequeue() D I. DT REPRESENTSJON e array med e peker for este isettig e peker tilsvarede første II. DT STRUKTUR f r Object[] r 0 1 it, f 2 it max 3 D III.DT INVRINT /f ideks til este / første tom hviss ==f (iitielt begge er 0) Når er de full? Etter max-isettiger==f! full år # == max 1 # = (max f + ) mod max < max kø tilsv. [f, f+1%max, f+2%max,, 1] equeue(d) f dequeue() f r 0 1 2 3 r 0 1 2 3 D 0 1 2 3 0 1 2 3 0 1 2 3 D Z D Z X Y D Z X f f f i-120 : H-98 5. Stabler og er: 5 public class /f ideks til este / første IMPLEMENTS QUEUE { tom hviss ==f private Object[] r; # = (max f + ) mod max < max private it, f, max=10; full hviss # == max 1 kø tilsv. [f, f+1%max, f+2%max,, -1] public () { r= ew Object[max]; // verifiser DI & O() =0; f=0; public void equeue(object o) { if (size() < max-1) { r[] = o; = ( + 1) % max; else {??? public Object dequeue() if (empty()) throw ew EmptyExc( Tom ved dequeue() ); else { tmp= r[f]; f = (f +1) % max; retur tmp; public Object frot() if (empty()) throw ew EmptyExc( Tom ved frot() ); else retur r[f]; public boolea empty() { retur f == ; public it size() { retur (max f + ) % max; O(1) i-120 : H-98 5. Stabler og er: 6
Liket Liste DT public class Node { private Object ; private Node ext; public Node(Object o, Node ) { = o; ext= ; public Node() { this(ull, ull); Object getelem() { retur ; Node getnext() { retur ext; void setelem(object o) { = o; void setnext(node ) { ext= ; Node h= ew Node(,ull); h= ew Node(,h); h Node g= ew Node(,h) g i-120 : H-98 5. Stabler og er: 7 Stabel / med LL St St St i-120 : H-98 5. Stabler og er: 8
Stabel / med LL public class StabL IMPLEMENTS STK { private Node ; private it s; public StabL() { = ull; s= 0; public void push(object o) { = ew Node(o,); s++; public Object pop() else { Object u=.getelem(); =.getnext(); s--; retur u; public Object peek() if (empty()) throw ew EmptyExc() ; else retur.getelem(); public boolea empty() { retur (==ull); public it size() { retur s; public class L IMPLEMENTS QUEUE { private Node, ; private it s; public L() {= ull; = ull; s= 0; public void equeue(object o) { Node l= ew Node(o,ull); if (!= ull).setnext(l); if ( == ull) = l; = l; s++; publicobjectdequeue()throwsemptyexc{ else { Object u=.getelem(); =.getnext(); s--; retur u; public Object frot() else retur.getelem(); public boolea empty() { retur (==ull); public it size() { retur s; O(1) i-120 : H-98 5. Stabler og er: 9 Lister og Listebasertre DataStrukturer travers. fra isettig fjerig EN-VEIS este første første første (Stabel) este første, første første e e () f f f TO-VEIS este, første første første forrige vilkårlig vilkårlig f f f este, første, første, første, forrige vilkårlig, vilkårlig, e e e i-120 : H-98 5. Stabler og er: 10
iterface DQueue /** e samlig - kø - der objektee ka isettes/fjeres i begge eder */ exteds Samlig { /** setter i et ytt objekt i starte * @param o Objektet som skal isettes */ void isertfirst(object o); /** setter i et ytt objekt på slutte * @param o Objektet som skal isettes */ void isertlast(object o); /** fjerer objekt fra starte * @retur Objektet som fjeres void removefirst(object o) throws EmptyExc; /** fjerer objekt fra slutte * @retur Objektet som fjeres void removelast(object o) throws EmptyExc; /** returerer første Objektet i køe * @retur første objektet i køe Object first() throws EmptyExc; /** returer e Objektet * @retur e objektet i køe Object last() throws EmptyExc; implemetasjo med toveis-liste med og gir alle operasjoee O(1) i-120 : H-98 5. Stabler og er: 11 implemetasjo av e DT med e ae DT class StackDQ implemets Stack { private DQueue d; public StackDQ(DQueue e) { d= e; public void push(object o) { d.isertfirst(o); public Object pop() retur d.removefirst(); public Object peek() retur d.first(); public boolea empty() { returd.empty(); public it size() { retur d.size(); class DQ implemets Queue { private DQueue d; public DQ(DQueue e) { d= e; public void equeue(object o) { d.isertfirst(o); public Object dequeue() retur d.removelast(); public Object frot() retur d.first(); public boolea empty() { returd.empty(); public it size() { retur d.size(); ruker bestemmer hvilke implemetasjo av DQueue ha vil bruke år ha oppretter et ytt objekt kaller ew StackDQ(???), ew DQ(???) i-120 : H-98 5. Stabler og er: 12