06. spa1 - stek i red opsluzivanja

Upload: helena-halonen

Post on 14-Feb-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    1/49

    STEK I RED OPSLUIVANJA

    Strukture podataka i algoritmi 1

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    2/49

    2

    Stek - koncepti(1)

    Stek je sekvenca elemenata bazirana na LIFO

    (last-in-first-out) principu.

    Elementi se mogu dodavati i uklanjati samo na

    jednoj strani sekvence (na vrhu steka). Dubinasteka je trenutni broj elemenata u steku.

    Prazan stek ima dubinu nula.

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    3/49

    3

    Stek - koncepti(1)

    Ilustracija (stek knjiga):

    Moby DickWar & Peace

    Rob Roy

    Inicijalno:

    Moby DickWar & Peace

    Posle skidanja

    knjige:

    Moby DickWar & PeaceMisrables

    Posle

    dodavanja

    Misrables:

    Moby DickWar & PeaceMisrables

    2001

    Posle doda-

    vanja2001:

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    4/49

    Stek: zahtevi

    1) Napraviti prazan stek.

    2) Dodati (push) element na vrh steka.

    3) Ukloniti (pop) element sa vrha steka.4) Testirati da li je stek prazan (i/ili pun).

    5) Pristupiti elementu sa vrha steka bez uklanjanja.

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    5/49

    Implementacija steka preko niza (1)

    Predstavlja ogranieni stek (dubina maximalnaDubina):

    Atrribut topElsadri indeks prvog slobodnog elementatrenutnadubina steka

    Niz elementi duinePODRAZUMEVANA_VELICINA, koji sadri

    elemente steka.

    Stek sa elementima:elementelement

    0 1

    element

    topEl1 topEL PODRAZUMEVANA_VELICINA1

    Prazan stek:

    1topEl=0 PODRAZUMEVANA_VELICINA1

    Ilustracija

    (PODRAZUMEVANA_

    VELICINA= 6):

    Moby

    Dick

    War &

    Peace

    Rob Roy

    10 2 topEl=3 4 5

    Element na vrhu Slobodno mesto

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    6/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    7/49

    Implementacija steka preko niza (3)

    /*** Kreira nov Stek zadate velicine.*/

    public Stek(int n) {topEl = 0;elementi = new Object[n];

    }

    /*** Kreira novi Stek podrazumevane veliine.

    */public Stek() {

    this(PODRAZUMEVANA_VELICINA);}

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    8/49

    Implementacija steka preko niza (4)

    /**

    *Vraada li je stek prazan.

    */

    public boolean isEmpty() {

    return topEl == 0;}

    /**

    *Vraada li je stek pun.

    */public boolean isFull() {

    return topEl == elementi.length;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    9/49

    Implementacija steka preko niza (5)

    /**

    *Vraavrednost elementa na vrhu steka. Ukoliko je stekprazan baca izuzetak.

    */

    public Object top() {if (isEmpty()) {

    throw new IllegalStateException("Stek je prazan");

    } else

    return elementi[topEl - 1];

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    10/49

    Implementacija steka preko niza (6)

    /**

    * Skida element sa vrha steka. Ukoliko je stek prazan baca seizuzetak.

    */

    public void pop() {if (isEmpty()) {

    throw new IllegalStateException("Stek je prazan");

    } else

    topEl--;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    11/49

    Implementacija steka preko niza (7)

    /**

    * Ubacuje prosleeni element na vrh steka. Ukoliko je stek ve

    pun baca se izuzetak.

    */

    public void push(Object x) {if (isFull()) {

    throw new IllegalStateException("Stek je pun");

    } else {

    elementi[topEl] = x;

    topEl++;

    }

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    12/49

    12

    Red opsluivanja koncepti (1)

    Red opsluivanja (queue) je sekvenca

    elemenata bazirana na FIFO (first-in-first-out)

    principu.

    Elementi se mogu dodavati na jednoj strani reda(na kraj) i uklanjati sa druge strane reda (sa

    poetka).

    Duina reda je trenutni broj elemenata u redu

    opsluivanja.

    Prazan red ima duinu nula.

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    13/49

    Red opsluivanja zahtevi

    1) Napraviti prazan red opsluivanja.

    2) Testirati da li je red opsluivanja prazan.

    3) Dodati element na kraj reda opsluivanja.

    4) Ukloniti element sa poetka reda opsluivanja.

    5) Pristupiti elementu sa poetka reda opsluivanja bezuklanjanja.

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    14/49

    Red sa

    elementima:

    0 front rear1 maxlen1

    element elementelement

    Impl. reda opsl. preko niza (1)

    Predstavlja ogranieni red opsluivanja(duina maximalnaDuina): Atributi prvi (front) iposlednji (rear)

    Niz elementi duinePODRAZUMEVANA_VELICINA,koji sadri elemente reda opsluivanja:

    Prazan red:

    0 maxlen1front=rear

    slobodnoslobodno Poslednji elementPrvi element

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    15/49

    Impl. reda opsl. preko niza (2)

    Demonstracija (maximalnaDuina = 6):

    Initially:

    0 1 2 3 4 5

    0front 0rear

    elems

    0length

    0

    Homer

    1

    Marge

    2

    Bart

    3

    Lisa

    4 5

    0front 4rear

    elems

    4length

    After adding Homer, Marge, Bart, Lisa:

    0

    Homer

    1

    Marge

    2

    Bart

    3

    Lisa

    4

    Maggie

    5

    0front 5rear

    elems

    5length

    After adding Maggie:

    0 1

    Marge

    2

    Bart

    3

    Lisa

    4

    Maggie

    5

    1front 5rear

    elems

    4length

    After removing the front element:

    0 1 2

    Bart

    3

    Lisa

    4

    Maggie

    5

    2front 5rear

    elems

    3length

    After removing the front element:

    0 1 2

    Bart

    3

    Lisa

    4

    Maggie

    5

    Ralph

    2front 0rear

    elems

    4length

    After adding Ralph:

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    16/49

    Impl. reda opsl. preko niza (3)

    Ako moramo pomerati elemente po nizu onda eoperacija za uklanjanje prvog elementa imati

    kompleksnost O(n). Ovo moemo izbei ako koristimo kruni niz

    umesto obinog niza.

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    17/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    18/49

    Impl. reda opsl. preko krunog niza (1)

    Predstavlja ogranieni red opsluivanja (duina maximalnaDuina):

    Atributi prvi (front) iposlednji (rear)

    Niz elementi duinePODRAZUMEVANA_VELICINA, kojisadri elemente reda opsluivanja (ili upodnizuelems[frontrear1] ili u elems[frontmaxlen1] ielems[0rear1].

    Red sa

    elementima:

    0 front rear1 maxlen1element elementelement

    or: elementelement elementelement0 maxlen1frontrear1

    Prazan red:0 maxlen1front=rear

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    19/49

    Impl. reda opsl. preko krunog niza (2)

    Demonstracija (maximalnaDuina = 6):Initially:

    0 1 2 3 4 5

    0front 0rear

    elems

    0length

    0

    Homer

    1

    Marge

    2

    Bart

    3

    Lisa

    4 5

    0front 4rear

    elems

    4length

    After adding Homer, Marge, Bart, Lisa:

    0

    Homer

    1

    Marge

    2

    Bart

    3

    Lisa

    4

    Maggie

    5

    0front 5rear

    elems

    5length

    After adding Maggie:

    0 1

    Marge

    2

    Bart

    3

    Lisa

    4

    Maggie

    5

    1front 5rear

    elems

    4length

    After removing the front element:

    0 1 2

    Bart

    3

    Lisa

    4

    Maggie

    5

    2front 5rear

    elems

    3length

    After removing the front element:

    0 1 2

    Bart

    3

    Lisa

    4

    Maggie

    5

    Ralph

    2front 0rear

    elems

    4length

    After adding Ralph:

    0

    Nelson

    1 2

    Bart

    3

    Lisa

    4

    Maggie

    5

    Ralph

    2front 1rear

    elems

    5length

    After adding Nelson:

    0

    Nelson

    1

    Martin

    2

    Bart

    3

    Lisa

    4

    Maggie

    5

    Ralph

    2front 2rear

    elems

    6length

    After adding Martin:

    0

    Nelson

    1

    Martin

    2 3

    Lisa

    4

    Maggie

    5

    Ralph

    3front 2rear

    elems

    5length

    After removing the front element:

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    20/49

    Impl. reda opsl. preko krunog niza (3)

    public class RedOpsl {

    private int prvi, poslednji;

    private Object[] elementi;

    /**

    *Veliinaredova za koje nije prosledjen parametar oveliini.

    */

    public static final int PODRAZUMEVANA_VELICINA = 100;

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    21/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    22/49

    Impl. reda opsl. preko krunog niza (5)

    /**Pomoni metod za zadravanje indeksaniza u opsegu. Metod uvek vraaindeks sledeeg elementa u odnosu na

    onaj koji je prosleen. Sledeielement je za jedno mesto vie odtrenutnog, osim za poslednji kome jesledei prvi.*/private int addOne(int i) {

    return (i + 1) % elementi.length;}

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    23/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    24/49

    Impl. reda opsl. preko krunog niza (7)

    /**

    *Vraavrednost elementa napoetkureda opsluivanja.Ukoliko je red prazan baca se izuzetak.

    */

    public Object first() {if (isEmpty())

    throw new IllegalStateException("Red je prazan");

    else

    return elementi[prvi];

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    25/49

    Impl. reda opsl. preko krunog niza (8)

    /**

    * Izbacuje element sapoetkareda opsluivanja. Ukoliko jered prazan baca se izuzetak.

    */

    public void popFirst() {if (isEmpty())

    throw new IllegalStateException("Red je prazan");

    else if (prvi == poslednji) {

    prvi = -1;

    poslednji = -1;

    } else

    prvi = addOne(prvi);

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    26/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    27/49

    Implementacija steka preko JPL (1)

    Predstavlja (neogranien) stek implementiran JPL,tako da prvi vor liste predstavlja element navrhu.

    Elemente stavljamo i ukllanjamo sa vrha (O(1))

    Stek sa

    elementima:

    element element element

    Prazan stek:

    Primer:RobRoy

    War &Peace

    MobyDick

    Element na vrhu

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    28/49

    Stek: zahtevi

    1) Napraviti prazan stek.

    2) Dodati (push) element na vrh steka.

    3) Ukloniti (pop) element sa vrha steka.4) Testirati da li je stek prazan (i/ili punsad nemamo).

    5) Pristupiti elementu sa vrha steka bez uklanjanja.

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    29/49

    Podseanje

    Java klasa koja implementira vorJPL:

    publicclassSLLNode {

    Object element;

    SLLNode succ;

    publicSLLNode (Object elem, SLLNode succ) {this.element = elem;this.succ = succ;

    }

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    30/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    31/49

    Implementacija steka preko JPL (3)

    public Object top() {

    if (isEmpty()) {

    throw new

    IllegalStateException("Stek je prazan");

    } else

    return top.element;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    32/49

    Implementacija steka preko JPL (4)

    public void pop() {

    if (isEmpty()) {

    throw new

    IllegalStateException("Stek je prazan");

    } else

    top = top.succ;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    33/49

    Implementacija steka preko JPL (5)

    public void push(Object x) {

    SLLNode novi = new SLLNode(x,null);

    novi.succ = top;top = novi;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    34/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    35/49

    Impl. reda opsluivanjapreko JPL (1)

    U oba sluaja je bar jedna operacija O(n)!

    Lisa Bart HomerMarge

    Homer Marge LisaBart

    prvi

    poslednji

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    36/49

    Impl. reda opsluivanjapreko JPL (2)

    Predstavlja (neogranien) red opsluivanja: JPL ije zaglavlje sadri pokaziva na prvi element (front) i na

    poslednji element (rear).

    Duina - length(opciono).

    Red sa

    elementima:

    element element elementfront

    rear

    Prazan red: front

    rear

    Ilustracija:front

    rear

    Homer Marge Bart Lisa

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    37/49

    Impl. reda opsluivanjapreko JPL (3)

    public class RedOpsl {SLLNode prvi, poslednji;

    public RedOpsl() {

    prvi = null;poslednji = null;

    }

    public boolean isEmpty() {return prvi == null;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    38/49

    Impl. reda opsluivanjapreko JPL (4)

    public Object first() {

    if (isEmpty())

    throw new

    IllegalStateException("Red je prazan");else

    return prvi.element;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    39/49

    Impl. reda opsluivanjapreko JPL (5)

    public void popFirst() {

    if (isEmpty())

    throw new

    IllegalStateException("Red je prazan");

    else if (prvi == poslednji) {

    prvi = null;

    poslednji = null;

    } elseprvi = prvi.succ;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    40/49

    Impl. reda opsluivanjapreko JPL (6)

    public void addRear(Object x) {

    SLLNode novi = new SLLNode(x,null);

    if (isEmpty())

    prvi = novi;else

    poslednji.succ = novi;

    poslednji = novi;

    }

    P i k li t i ik

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    41/49

    Primena krune liste sa graninikom

    na implementaciju steka i reda opsl.

    PODSEANJE: spoljanji pokaziva pokazuje navetaki element graninik, koji se nalazi izmeuprvog i poslednjeg elementa u listi.

    Nema posebnih sluajeva kod ubacivanja prvogelementa u strukturu

    Nema posebnih sluajeva kod izbacivanja

    poslednjeg elementa iz strukture Kod reda opsluivanja nisu potrebna dva spoljanja

    pokazivaa

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    42/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    43/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    44/49

    Stekkruna lista sa graninikom (3)

    public void pop() {

    if (isEmpty()) {

    throw new

    IllegalStateException("Stek je prazan");

    } else

    header.succ = header.succ.succ;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    45/49

    Stekkruna lista sa graninikom (4)

    public void push(Object x) {

    SLLNode novi = new SLLNode(x,null);

    novi.succ = header.succ;

    header.succ = novi;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    46/49

    Red opsl.kruna lista sa graninikom (1)

    public class RedOpslKruzList {

    SLLNode header;

    public RedOpslKruzList() {

    header = new SLLNode("", null);

    header.succ = header;

    }

    public boolean isEmpty() {

    return header == header.succ;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    47/49

    Red opsl.kruna lista sa graninikom (2)

    public Object first() {

    if (isEmpty())

    throw new

    IllegalStateException("Red je prazan");

    else

    return header.succ.element;

    }

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    48/49

  • 7/23/2019 06. SPA1 - Stek i Red Opsluzivanja

    49/49

    Red opsl.kruna lista sa graninikom (4)

    public void addRear(Object x) {

    header.element = x;

    SLLNode novi = new SLLNode("",null);

    novi.succ = header.succ;

    header.succ = novi;

    header = novi;

    }