Merhaba arkadaşlar,
Bu yazımızda Java üzerinde çift yönlü bağlı liste yapısını inceleyeceğiz. Biliyorsunuz ki daha önceki yazılarımızda Tek Yönlü Bağlı liste yapısını incelemiştik ve detaylı bir şekilde tanımlarımızı vermiştik. Bu yazımızda ise açıklamaları tamamen kodların yanında yaptık. Anlamadığınız bir adım olduğu durumda Tek Yönlü Bağlı Listeler başlığı altından anlamadığınız adımları bulabilirsiniz.
İşin kod kısmına geçelim.
class Link { public long veri; // Düğüme gelecek olan veri public Link sonraki; // Listede sonraki düğüm public Link onceki; // Listede önceki düğüm // ------------------------------------------------------------- public Link(long d) // Verinin standart geldiği yapılandırıcı { veri = d; } // ------------------------------------------------------------- public void listele() // yazdırma fonksiyonu { System.out.print(veri + " "); } // ------------------------------------------------------------- } class IkiYonluListe { private Link ilk; // ilk veriyi tutan referans private Link son; // son veriyi tutan referans // ------------------------------------------------------------- public IkiYonluListe() // Liste yapılandırıcısı { ilk = null; // Listeyi boş olarak tanımlıyoruz. son = null; } // ------------------------------------------------------------- public boolean bosMu() // Liste doluluk kontrolü { return ilk == null; } // ------------------------------------------------------------- public void basaEkle(long dd) // Listenin başına ekleme fonksiyonu { Link yeniDugum = new Link(dd); // yeni düğüm oluşturuluyor if (bosMu()) // Listenin boşluk kontrolü son = yeniDugum; else ilk.onceki = yeniDugum; // Eski ilk ile yer değişiyor yeniDugum.sonraki = ilk; ilk = yeniDugum; } public void sonaEkle(long dd) // Listenin sonuna ekleme fonksiyonu { Link yeniDugum = new Link(dd); // yeni düğüm oluşturuyoruz. if (bosMu()) //Listenin boşluk kontrolü ilk = yeniDugum; else { son.sonraki = yeniDugum; // son ile yeni düğüm yer değişiyor. yeniDugum.onceki = son; } son = yeniDugum; } public Link bastanSil() // Baştaki veri silme fonksiyonu { Link yedek = ilk; if (ilk.sonraki == null) // Eğer sadece 1 veri varsa son = null; // sonuncuyu boşa çıkartıyoruz. else ilk.sonraki.onceki = null; ilk = ilk.sonraki; return yedek; } // ------------------------------------------------------------- public Link sondanSil() // Sondan silme fonksiyonu { Link yedek = son; if (ilk.sonraki == null) // Eğer sadece 1 veri varsa ilk = null; // ilk veri boşa çıkıyor else son.onceki.sonraki = null; son = son.onceki; return yedek; } public boolean arkasinaEkle(long anahtar, long dd) { Link aktif = ilk; while (aktif.veri != anahtar) // Eşleşme bulunana kadar { aktif = aktif.sonraki; // her seferinde döngü döndürüyoruz if (aktif == null) return false; // Bulunmayınca false dönüyor } Link yeniDugum = new Link(dd); // Yeni düğüm oluşturuyoruz if (aktif == son) // Eğer son veri ise { yeniDugum.sonraki = null; // yeni düğüm boşa çıkıyor son = yeniDugum; } else { yeniDugum.sonraki = aktif.sonraki; aktif.sonraki.onceki = yeniDugum; } yeniDugum.onceki = aktif; aktif.sonraki = yeniDugum; return true; } public Link seciliSil(long anahtar) // Seçili sıradaki elemanı silmek için kullanılan fonksiyon { Link aktif = ilk; while (aktif.veri != anahtar) // Eşleşme bulana kadar { aktif = aktif.sonraki; // Döngü sürekli bir sonrakine aktarılıyor if (aktif == null) return null; // eşleşme bulunamadı } if (aktif == ilk) ilk = aktif.sonraki; else aktif.onceki.sonraki = aktif.sonraki; if (aktif == son) son = aktif.onceki; else aktif.sonraki.onceki = aktif.onceki; return aktif; // Bulunan değer döndürülüyor } public void yazdir() { System.out.print("Liste : "); Link aktif = ilk; while (aktif != null) // Listenin sonuna kadar kontrol ediliyor { aktif.listele(); // Veri yazdırılıyor aktif = aktif.sonraki; // Döngü döndürülüyor } System.out.println(""); } } class LinkedList { public static void main(String[] args) { IkiYonluListe liste = new IkiYonluListe(); liste.basaEkle(22); //Başa ekleme yapıyoruz liste.basaEkle(44); liste.basaEkle(66); liste.sonaEkle(11); // Sona ekleme yapılıyor liste.sonaEkle(33); liste.sonaEkle(55); liste.yazdir(); //Ekrana yazdırılıyor liste.bastanSil(); // İlk veri siliniyor liste.sondanSil(); // Son veri siliniyor liste.seciliSil(11); // "11" etiketine sahip veri siliniyor liste.yazdir(); // Ekrana yazdırılıyor liste.arkasinaEkle(22, 77); // 22 ' den sonra 77 ekleniyor. liste.arkasinaEkle(33, 88); // 33'den sonra 88 ekleniyor. liste.yazdir(); // Ekrana yazdırılıyor } }
Çift yönlü bağlı liste yapısını bu şekilde inceleyebiliriz.
Teşekkürler.