Download - 04. SPA1 - Kruzne Liste
![Page 1: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/1.jpg)
KRUŽNE LISTE I
KRUŽNE LISTE SA GRANIČNIKOM
Strukture podataka i algoritmi 1
![Page 2: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/2.jpg)
Kružne liste
Motivacija: bolje iskoristiti pokazivač poslednjeg
elementa
Može da pokazuje na prvi element umesto na null
Tada svi elementi postaju ravnopravni
Na koji element da pokazuje spoljašnji pokazivač?
pig dog rat cat
dog
![Page 3: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/3.jpg)
Kružne liste
Java klasa koja implementira čvor kružne JPL:
public class CSLLNode {
Object element;
CSLLNode succ;
public CSLLNode (Object elem, CSLLNode
succ) {
this.element = elem;
this.succ = succ;
}
}
![Page 4: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/4.jpg)
Kružne liste
Java klasa koja implementira zaglavlje kružne JPL:
Spoljašnji pokazivač će pokazivati na poslednji element u listi (zbog efikasnijeg ubacivanja na kraj)
public class CSLL {
CSLLNode last;
public CSLL () {
// Pravi praznu JPL.
this.last = null;
}
...
}
![Page 5: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/5.jpg)
Prolazak kroz kružnu JPL
public void printFirstToLast () {
// Stampa sve elemente od prvog do poslednjeg.
if (last != null) {
CSLLNode curr = this.last.succ;
while (curr != this.last) {
System.out.println(curr.element);
curr = curr.succ;
}
System.out.println(curr.element);
}
}
![Page 6: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/6.jpg)
Ubacivanje na početak
public void insertFirst (Object elem) {
// Ubacuje elem na pocetak liste
CSLLNode ins = new CSLLNode(elem, null);
if (this.last == null) {
ins.succ = ins;
this.last = ins;
} else {
ins.succ = this.last.succ;
this.last.succ = ins;
}
}
![Page 7: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/7.jpg)
Ubacivanje na kraj
public void insertLast (Object elem) {
// Ubacuje elem na kraj liste
CSLLNode ins = new CSLLNode(elem, null);
if (this.last == null) {
ins.succ = ins;
} else {
ins.succ = this.last.succ;
this.last.succ = ins;
}
this.last = ins;
}
![Page 8: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/8.jpg)
Brisanje prvog
public void deleteFirst() {
// Brise prvi element
if (this.last != null)
if (this.last.succ == this.last)
this.last = null;
else
this.last.succ = this.last.succ.succ;
}
![Page 9: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/9.jpg)
Traženje elementa
public CSLLNode find (Object elem) {
// Pronalazi elem u JPL, vraca null ako elem ne postoji
if (this.last != null) {
CSLLNode curr = this.last.succ;
while (curr != this.last &&
!curr.element.equals(elem))
curr = curr.succ;
if (curr.element.equals(elem))
return curr;
else
return null;
} else
return null;
}
![Page 10: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/10.jpg)
Kružne liste
Ostale operacije analogno kao kod “obične” JPL
![Page 11: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/11.jpg)
Kružne liste sa graničnikom
Motivacija: da li je moguće izbeći posebne
slučajeve kod:
Ubacivanja u praznu listu
Izbacivanja elementa iz jednoelementne liste
Držimo u listi stalno jedan čvor koji nije element liste
Graničnik (stražar, zaglavlje)
![Page 12: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/12.jpg)
Kružne liste sa graničnikom
Spoljašnji pokazivač pokazuje na graničnik
--- dog rat cat
---
---
dog
![Page 13: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/13.jpg)
Kružne liste sa graničnikom
Java klasa koja implementira čvor kružne JPL:
public class CSLLNode {
Object element;
CSLLNode succ;
public CSLLNode (Object elem, CSLLNode
succ) {
this.element = elem;
this.succ = succ;
}
}
![Page 14: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/14.jpg)
Kružne liste sa graničnikom
Java klasa koja implementira zaglavlje kružne JPL:
Spoljašnji pokazivač će pokazivati na graničnik koji se nalazi pre prvog i posle poslednjeg elementa
public class CSLLH {
CSLLNode header;
public CSLLH () {
// Pravi praznu JPL sa granicnikom.
this.header = new CSLLNode("", null);
this.header.succ = this.header;
}
...
}
![Page 15: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/15.jpg)
Prolazak kroz kružnu JPL sa
graničnikom
public void printFirstToLast () {
// Stampa sve elemente od prvog do posl.
CSLLNode curr = this.header.succ;
while (curr != this.header) {
System.out.println(curr.element);
curr = curr.succ;
}
}
![Page 16: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/16.jpg)
Ubacivanje na početak
public void insertFirst (Object elem) {
// Ubacuje elem na pocetak liste
CSLLNode ins = new CSLLNode(elem, null);
ins.succ = this.header.succ;
this.header.succ = ins;
}
![Page 17: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/17.jpg)
Ubacivanje na kraj
public void insertLast (Object elem) {
// Ubacuje elem na kraj liste
CSLLNode ins = new CSLLNode("", null);
ins.succ = this.header.succ;
this.header.succ = ins;
this.header.element = elem;
this.header = ins;
}
![Page 18: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/18.jpg)
Brisanje prvog
public void deleteFirst() {
// Brise prvi element
this.header.succ = this.header.succ.succ;
}
Da li ovo radi i kod prazne liste?
![Page 19: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/19.jpg)
Traženje elementa
Stavimo element koji tražimo u graničnik
Prolazimo kroz listu dok ne nadjemo element
Pronalazimo ga sigurno barem u graničniku (nema
provere za kraj liste)
Ako smo stigli do graničnika – element ne postoji u listi
Inače – postoji, vraćamo pokazivač na nađeni čvor
![Page 20: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/20.jpg)
Traženje elementa
public CSLLNode find (Object elem) {
// Pronalazi elem u JPL, vraca null ako // elem ne postoji
this.header.element = elem;
CSLLNode curr = this.header.succ;
while (!curr.element.equals(elem))
curr = curr.succ;
if (curr != this.header)
return curr;
else
return null;
}
![Page 21: 04. SPA1 - Kruzne Liste](https://reader033.vdocuments.net/reader033/viewer/2022052223/563db94e550346aa9a9c0b89/html5/thumbnails/21.jpg)
Kružne liste sa graničnikom
Ostale operacije analogno kao kod “obične” JPL