Bağlı Liste(Linked List) Yapısı

Programlama dillerinde birden çok veriyi tutmak için genellikle dizileri kullanırız. Ancak dizileri kullanmak için verimizin boyutunu bilmemiz gerekir. Eğer bilmiyorsak ya da belirlediğimiz değerin üzerine çıkmak istiyorsak sıkıntı yaşarız. Yaşayacağımız bir diğer sıkıntı ise elimizdeki veri setinin arasına bir değer girmek istersek ortaya çıkar. Örneğin 500 elemanlı bir dizinin 300. elemanına dışarıdan başka bir değer girersek 300. elemandan sonraki değerleri birer kaydırmamız gerekir. İşte tüm bunları aşmak için bağlı liste(linked list) kullanabiliriz.

Bağlantılı liste kullanmanın avantaj ve dezavantajları;

  • Dinamik boyuta sahip oluruz
  • Araya eleman eklerken fazla maliyet oluşturmaz

 

  • Rastgele erişim yoktur
  • Pointer için fazladan alan kullanırız.

 

Linked list temel işlemlerimiz

  • Ekle
  • Sil
  • Ara
  • Bul
  • Yok et

  • Her bir elemanımıza düğüm(node) denir.
  • Bağlanmış düğümler serisine bağlantılı liste denir.
  • Her düğümde veri ve işaretçi bulunur.
  • Baş; ilk düğüme olan işaretçidir.
  • Son düğüm NULL işaret eder.

Şimdi implemente edelim

Öncelikle 2 ana sınıfımız olacak. Bunlar Node ve List

Şimdi de InsertNode fonksiyonumuzu yazalım. Kabaca algoritması;

  • index’inci elemanı bul
  • Yeni düğüm için hafızada yer ayır
  • Yeni düğüm kendisinden sonrasını gösterecek
  • Yeni düğümden önceki düğüm yeni düğümü gösterecek

Yukarıdaki işlemleri yaparken 2 farklı durumla karşılaşırız.

  • İlk düğüm olarak ekleme
  • Ortaya ve sona ekleme
FindNode fonskiyonumuz

  • Listede x verisini ara
  • Böyle bir düğüm varsa pozisyonunu dön yoksa 0 dön
DeleteNode fonksiyonu

  • Silinecek düğümü bul
  • Bulunan düğümü hafızadan sil
  • Düğümden önceki pointer düğümden sonraki pointeri göstersin.

Ekleme işleminde olduğu gibi 2 özel durumumuz var.

  • İlk düğümü silme
  • Ortadaki veya sonraki düğümü silme
Listedeki elemanları ve eleman sayısını yazdırma
Listeyi silme
 

Örnek işlemler

Projeyi buradan indirebilirsiniz

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.