Upload
simona-ventura
View
215
Download
2
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