Listedeki her elemana düğüm daha çok kullanılan tabiriyle node adı verilir. Listenin ilk elemanına dışarıdan bir işaretçi yardımıyla ulaşılır. Java'da bu liste, ayrı bir sınıfta tutulur.
Bağlı listelerin dizilere göre avantajı, bir grup eleman arasına eleman eklemede ve bir grup eleman arasından eleman çıkarmada ortaya çıkar. Listede bu iş daha uzun ve zaman alıcıdır. Bir eleman çıkarılacağı veya ekleneceği zaman tüm dizide bir oynama yapılması gerekir. Bağlı listede ise tüm elemanlarda bir değişim söz konusu değildir. Ayrıca her yeni eleman için hafızada yeni yer ayrılır. Dizilerdeki gibi daha önceden yer ayırmaya gerek yoktur.
Bağlı listenin çeşitleri vardır. Bunlar;
Tekil Bağlı Liste(Singly Linked Lists): Son node herhangi bir elemanı işaret etmez. Gösterdiği değer Null olur.
Çift Bağlı Listeler (Doubly Linked Lists) : Tüm elemanlar hem bir sonraki yapıyı hem de bir önceki yapıyı işaret eder. Son node un gösterdiği değer Null'dur.
Dairesel Çift Bağlı Listeler (Circular Doubly Linked Lists) : Çift bağlı listeye artı olarak son node ilk node'u işaret eder.
Hep yapılanın aksine en basit örnek değil de en karmaşık olanın java kodunu vererek işi koda dökelim şimdi.
Dairesel Çift Bağlı Listeler (Circular Doubly Linked Lists)
Node Sınıfımız:
public class Node { String isim; Node sonraki; Node onceki; public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public Node getSonraki() { return sonraki; } public void setSonraki(Node sonraki) { this.sonraki = sonraki; } public Node getOnceki() { return onceki; } public void setOnceki(Node onceki) { this.onceki = onceki; } }Asıl işlemin yapıldığı CircularDoubleLinkedList sınıfımız:
public class CircularDoubleLinkedList { Node head; public void ekle(String isim) { Node yeniNode=new Node(); yeniNode.setIsim(isim); if(head==null) { head=yeniNode; head.setSonraki(yeniNode); head.setOnceki(yeniNode); return; } Node temp=head.getOnceki(); temp.setSonraki(yeniNode); yeniNode.setOnceki(temp); yeniNode.setSonraki(head); head.setOnceki(yeniNode); } public void sil(String ad) { if(head==null){System.out.println("Liste boş"); return;} Node temp=head; while(temp.getIsim()!=ad) { temp=temp.sonraki; } temp.onceki.setSonraki(temp.sonraki); temp.sonraki.setOnceki(temp.onceki); } public void listele() { if(head==null) { System.out.println("liste boş"); return; } System.out.println("Listesi: "); System.out.println(head.isim); Node temp=head.sonraki; while(temp!=head) { System.out.println(temp.isim); temp=temp.sonraki; } } }Bu da Main sınıfımız:
public class Main { public static void main(String[] args) { CircularDoubleLinkedList d=new CircularDoubleLinkedList(); d.ekle("ozgur"); d.ekle("ozan"); d.ekle("burcu"); d.ekle("metin"); d.listele(); d.sil("metin"); System.out.println(); d.listele(); } }
Çıktı aşağıdaki gibi olacaktır.
Listesi:
ozgur
ozan
burcu
metin
Listesi:
ozgur
ozan
burcu
Kolay gelsin.
0 yorum:
Yorum Gönder