C# ile Veri Yapıları:
Linked List
(Bağlı Liste)
Bağlı listeler programcılara çeşitli kolaylıklar sağlar. Sağladığı kolaylıklar sayesinde yaygın olarak kullanılır ve tercih edilirler. Bağlı listeler, dizi veri yapısına benzer ancak dizilere göre daha avantajlıdır. Bağlı listeler, dinamik veri yapılarıdır. Bu sayede araya eleman ekleme, silme gibi işlemler daha kolay bir şekilde yapılabilir. Bu yazımızda bağlı listelerin detaylarından bahsedeceğiz.
08.02.2022 tarihli yazı 9257 kez okunmuştur.
Bağlı liste, node’ları (düğümleri) başka node’lara işaret etmesi (point) ile bağlanan dizi veri yapısıdır, bağlantı “NULL” ile sonlandırılır. Bu da bir sonraki düğümün point’in “NULL” olduğu anlamına gelir.
►İlginizi Çekebilir: R Programlama Fonksiyon, Nesne Veri Yapıları | 3. Bölüm
Kısaca şöyle diyebiliriz; bağlı liste içerisinde bellek üzerinde tanımlanan elemanlar pointer yardımı ile birbirini takip eden vagonlar gibi çalışır. Kendinden sonraki gelecek olan düğümün adresini tutar. Bu sayede, her düğüm kendinden sonraki gelecek olan düğümün yerini bilir. Bu özellikleri sayesinde, bellekte sıralanış şekli açısından esneklik sağlar.
Linked list, yazılım dünyasında önemli yeri olan veri yapılarından biridir. Bağlı liste, dizilerden sonra en çok kullanılan veri yapısıdır. Bağlı listeler, dinamik veri yapılarıdır. Dizilerde olduğu gibi başta kaç tane elemanla çalışılacağı belirtilmek zorunda değildir. Dizilerde olduğu gibi eleman ekleme, silme işlemleri uygulanabilir ve araya eleman eklenebilir. Bağlı listeler sağladığı avantajlardan dolayı daha çok tercih edilir.
Singly Linked List (Tek Yönlü Bağlı Liste)
Tek yönlü bağlı liste; bağlı listelerin en temel, en basit ve anlaşılması en kolay veri türüdür. Düğüm, bir sonraki düğüme bir pointer içerir. Bu sayede düğüm, kendinden sonraki düğümün adresini bilir. Tek yönlü bağlantılı listeler, verilerin yalnızca tek bir yönde geçişine izin verir.
Şimdi beraber bir örnek yapalım. Bir tek yönlü bağlı liste oluşturalım ve bu listeye rastgele olarak eleman ekleyelim. Bu eklediğimiz elemanları da ekrana yazdıralım:
“Tekli” adında bir class oluşturduk, “data” bağlı listedeki elemanın değeri, “next” bir sonraki düğümü işaret eder. Class’ın içinde bulunan “Print” fonksiyonu ise bağlı listedeki elemanları ekrana yazmamızı sağlayacak.
using System;
class Tekli
{
public int data;
public Tekli next;
public void Print()
{
Console.Write(" [" + data + "] - ");
if(next != null) next.Print();
else Console.WriteLine();
}
Şimdi gelelim “main” fonksiyonumuzun içine yazacağımız kodlara:
static void Main(string[] args)
{
Random rnd = new Random();
Tekli head = null;
Tekli q = null;
for(int i = 9; i>=0; i--)
{
q = new Tekli();
q.data = rnd.Next(9);
q.next = null;
if (head == null) head = q;
else
{
q.next = head;
head = q;
}
}
q.Print();
}
}
“Random rnd = new Random();” ile rastgele sayı oluşturmak için bir nesne oluşturduk. “q = new Tekli();” ile ismi q olan bir nesne oluşturduk. “q.data = rnd.Next(9);” q nesnesine rastgele olarak bir değer verdik. “q.next = null;” ile q’dan sonraki nesnenin null olduğunu söyledik.
“if (head == null) head = q;
else
{
q.next = head;
head = q;
}”
Bu şekilde listelerin birbirini point etmesi ve bağlı listenin elemanlarına değer verilmesi sağlanmaktadır.
Doubly Linked List (Çift Yönlü Bağlı Liste)
Çift yönlü bağlantılı liste, bir düğümün dizideki bir önceki ve bir sonraki düğüme bir pointer içerdiği veri yapısıdır. Bu nedenle, çift bağlantılı listede bir düğüm üç bölümden oluşur, data, sonraki düğüme bir pointer ve önceki düğüme bir pointer.
Tek yönlü bağlı liste veri yapısını çok iyi anladıysanız, çift yönlü bağlı liste veri yapısını anlamanız ve öğrenmeniz daha kolay olacaktır. Tek yönlü bağlı listede yalnızca bir sonraki düğüme ilerleyebiliriz, ancak geri dönemeyiz. Fakat çift yönlü bağlı listede bir önceki ve sonraki düğümlere ilerleyebiliriz
Şimdi bir örnek yapalım. Bir tane çift yönlü bağlı liste oluşturalım ve rastgele değer verelim. Oluşturduğumuz çift yönlü listeyi de ekrana yazdıralım:
Tek yönlü bağlı listeler de olduğu gibi, adı “Ciftli” olan bir class oluşturalım. “data”, “next” ve “prev” ‘leri tanımlayalım.
class Ciftli
{
public int data;
public Ciftli next;
public Ciftli prev;
}
“main” içerisine yazacağımız kodlar ise:
static void Main(string[] args)
{
Random rnd = new Random();
Ciftli baslik = null;
Ciftli qc = null;
Ciftli önceki = null;
for (int i = 0; i<15; i++)
{
qc = new Ciftli();
qc.data = rnd.Next(9);
qc.next = null;
if(baslik == null)
{
baslik = qc;
önceki = baslik;
qc.prev = null;
Console.WriteLine("Sira: " + i + ": " + qc.data);
}
else
{
baslik = qc;
qc.prev = önceki;
qc.prev.next = baslik;
Console.WriteLine("Sira: " + i + ": " + qc.data);
}
}
Kaynaklar:
►www.geeksforgeeks.org/data-structures/linked-list/
►www.tutorialspoint.com/data_structures_algorithms/linked_list_algorithms.htm
►medium.com/@Aryan_singh/interesting-things-about-linked-list-1b6eae2657d
►learnersbucket.com/tutorials/data-structures/doubly-linked-list-implementation-in-javascript/
YORUMLAR
Aktif etkinlik bulunmamaktadır.
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- Nasıl Dönüşür I Elektrik 4.0
- Nasıl Dönüşür I Fosil Yakıt
- Nasıl Dönüşür I Kompost
- Sigma DIN Rayı Çözümleri: Ürün Portföyü, Teknik Özellikler ve Kullanım Alanları
- Denizcilik Endüstri Uygulamaları ve Servis Bakım Süreçleri
- DrivePro Yaşam Döngüsü Hizmetleri
- Batarya Testinin Temelleri
- Enerji Yönetiminde Ölçümün Rolü: Verimliliğe Giden Yol
- HVAC Sistemlerinde Kullanılan EC Fan, Sürücü ve EC+ Fan Teknolojisi
- Su İşleme, Dağıtım ve Atık Su Yönetim Tesislerinde Sürücü Kullanımı
ANKET