5
SPA1 - Dvostruko povezane liste Doni Pracner Contents Dvostruko povezane liste 1 Strukture podataka i algoritmi 1 ..................... 1 Dvostruko povezana lista ......................... 1 Primer: palindromi ............................. 1 Proširenja za samostalnu vežbu: ...................... 5 KRAJ 5 Dvostruko povezane liste Strukture podataka i algoritmi 1 Doni Pracner @DoniPracner | [email protected] Dvostruko povezana lista • Omogućava jednostavno kretanje kroz listu i unapred i unazad • Svaki element ima dodatni pokazivač na prethodni element • Prvi element pokazuje na null kao prethodnika • Tipično se čuva i pokazivač na poslednji element liste Primer: palindromi • Dvostruko povezana lista znakova Koristićemo je da odredimo sve palindrome (reči koje se čitaju jednako unapred i unazad) 1

spa1-dpliste

Embed Size (px)

DESCRIPTION

Programiranje Java.Strukture podata i algoritmiKurbalija Vladimir.Struktura: Dvostrko povezana lista

Citation preview

  • SPA1 - Dvostruko povezane liste

    Doni Pracner

    Contents

    Dvostruko povezane liste 1

    Strukture podataka i algoritmi 1 . . . . . . . . . . . . . . . . . . . . . 1

    Dvostruko povezana lista . . . . . . . . . . . . . . . . . . . . . . . . . 1

    Primer: palindromi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    Proirenja za samostalnu vebu: . . . . . . . . . . . . . . . . . . . . . . 5

    KRAJ 5

    Dvostruko povezane liste

    Strukture podataka i algoritmi 1

    Doni Pracner@DoniPracner | [email protected]

    Dvostruko povezana lista Omoguava jednostavno kretanje kroz listu i unapred i unazad Svaki element ima dodatni pokaziva na prethodni element Prvi element pokazuje na null kao prethodnika Tipino se uva i pokaziva na poslednji element liste

    Primer: palindromi Dvostruko povezana lista znakova Koristiemo je da odredimo sve palindrome (rei koje se itaju jednako

    unapred i unazad)

    1

  • Napomena: ovo naravno nije najefikasniji nain da se odreuju polinomi,ve ilustrativni primer

    Element liste je Znak sa pokazivaima na prethodni i sledei:class Znak {

    char info;Znak sledeci;Znak prethodni;

    public Znak(char c) {this.info = c;this.sledeci = null;this.prethodni = null;

    }

    public String toString() {return info + "";

    }}

    Glavna klasa ima pokazivae na prvi i poslednji znak:class DPLista {

    Znak prvi;Znak poslednji;

    public DPLista() {prvi = null;poslednji = null;

    }.....}

    Za toString metod nam nije bitno ni to postoji pokaziva na poslednji, ni toje dvostruko povezana lista:

    public String toString() {String rez = "";Znak tekuci = prvi;while (tekuci != null) {

    rez += tekuci.info;tekuci = tekuci.sledeci;

    }return rez;

    }

    Ubacivanje na kraj je jednako efikasno kao i ubacivanje na poetak kad imamopokaziva na poslednji:

    2

  • public void ubaciNaKraj(char c) {Znak novi = new Znak(c);if (poslednji == null) {

    prvi = novi;poslednji = novi;

    } else {novi.prethodni = poslednji;poslednji.sledeci = novi;poslednji = novi;

    }}

    Moemo odmah ubacivati i celu re:public void ubaciString(String rec) {

    for (int i = 0; i < rec.length(); i++) {ubaciNaKraj(rec.charAt(i));

    }}

    Definiemo prvo metod koji vraa podre odreenu pokazivaima:public String podRec(Znak pocetak, Znak kraj) {

    String rez = "";Znak tekuci = pocetak;while (tekuci != kraj) {

    rez += tekuci.info;tekuci = tekuci.sledeci;

    }rez += tekuci.info;return rez;

    }

    Definiemo proveru da li je takva re palindrom:public boolean jePalindrom(Znak pocetak, Znak kraj) {

    while ((pocetak != kraj) && (pocetak.sledeci != kraj)) {if (pocetak.info != kraj.info) {

    return false;} else {

    pocetak = pocetak.sledeci;kraj = kraj.prethodni;

    }}return pocetak.info == kraj.info;

    }

    Koristei prethodno definiemo metod koji generie sve podrei i proverava jesuli palindromi:public void stampajSvePalindrome() {

    3

  • Znak pocetak = prvi;while (pocetak != null) {

    Znak kraj = poslednji;while (kraj != pocetak) {

    if (jePalindrom(pocetak, kraj)) {System.out.println(podRec(pocetak, kraj));

    }kraj = kraj.prethodni;

    }pocetak = pocetak.sledeci;

    }}

    Pomoni metod u glavnom programu:static void testRec(String rec) {

    System.out.println("= Rec:");System.out.println(rec);DPLista lista = new DPLista();lista.ubaciString(rec);System.out.println("= Palindromi:");lista.stampajSvePalindrome();

    }

    Glavni program koji pokree nekoliko testova:public static void main(String[] args) {

    testRec("abakus");testRec("anavolimilovana");testRec("nekoliko brodskih kapaka");

    }

    Izvravanje:= Rec:abakus= Palindromi:aba

    = Rec:anavolimilovana= Palindromi:anavolimilovanaananavolimilovanavolimilovavolimilovolimilolimilimiana

    4

  • = Rec:nekoliko brodskih kapaka= Palindromi:kapakapaaka

    Proirenja za samostalnu vebu: Odreivanje palindroma tako da:

    se ignorie razlika izmeu velikih i malih slova se ignoriu razmaci meu reima

    KRAJ

    5

    Dvostruko povezane listeStrukture podataka i algoritmi 1Dvostruko povezana listaPrimer: palindromiProirenja za samostalnu vebu:

    KRAJ