Bağlı listeler adı üzerinde birbirine bağlı düğümlerin meydana getirdiği bir veri yapısı türüdür. Düğüm dediğimiz yapı içerisinde en az bir veri  ve kendinden sonra gelen düğümü gösterebilmesi için işaretçi (pointer) içerir. Bu düğümler işaretçiler yardımıyla birbirlerini göstermesi sağlanarak adeta zinciri andıran bir yapı oluştururlar. 

Bağlı listeler; tekli bağlı, ikili bağlı ve dairesel olmak üzere üç farklı şekilde oluşturulabilir. Biz bu yazıda tekli bağlı bir listeyi inceliyor olacağız.

Konuyu fazla uzatmadan editörümüzü açıp “.c” uzantılı bir dosya oluşturduktan sonra program içerisinde kullanacağımız kütüphaneleri dahil ederek kod yazmaya ve bağlı listeleri daha yakından tanımaya başlayalım.

Şimdi de C dilindeki struct’ları kullanarak adına Node dediğimiz düğümleri temsil edecek olan kendi veri yapımızı oluşturalım ve hemen ardından program içerisinde kullanabilmek için oluşturduğumu veri yapısını farklı bir tür olarak tanımlayalım.

Her bağlı listeyi kontrol altında tutabilmek ve ekleme, silme, yazdırma vb. operasyonları gerçekleştirebilmek için bağlı listenin ilk değerini saklamamız gerekiyor. Bunu “head” adını verdiğimiz ve listenin başını gösterecek olan işaretçiyi tanımlayarak  sağlarız. Dikkat ederseniz bu işlemi global olarak yapacağım ki programın her yerinden listenin başına kolaylıkla ulaşabileyim.

Şu andan itibaren temel işlemleri gerçekleştirdik diyebiliriz. Artık veri ekleme, silme, yazdırma vb. operasyonları gerçekleştirecek olan fonksiyonları yazmaya hazırız. 

İlk önce yazacağımız fonksiyon listenin başını gösteren işaretçinin şimdilik hiç bir şeyi göstermemesini sağlayacak.

Şimdi listenin başına eleman eklememizi sağlayacak olan fonksiyonu yazalım. Bu fonksiyon her çağrıldığında parametre olarak tam sayı bir değer alacak.

Listenin sonuna eleman eklemek için yukarıdakinden farklı olarak listenin başından sonuna kadar gidecek olan iterator tanımlamamız gerekiyor. 

Belli bir pozisyondaki düğümü silmemize yardımcı olacak fonksiyon tam sayı türünde bir parametre değeri alacak. Verilen pozisyondan bir önceki düğüme kadar gidecek ve ardından yapması gereken işi yapacak.

Peki belli bir pozisyona yeni bir düğüm nasıl ekleriz? Benzer bir yöntem kullanarak. Bu sefer fonksiyon iki tane parametre alacak birisi pozisyon değeri diğeri ise yeni eklenecek düğümün saklayacağı tam sayı değeri.

Şimdi bu temel işlemleri yapan fonksiyonları yazdıktan sonra konsolda çıktı görebilmemizi sağlayacak olan fonksiyonu yazalım.

Ek olarak listede kaç düğüm olduğunun bilgisini konsola yazdıracak olan fonksiyonu yazalım.

Not: Hemen üstteki görseldeki traverse işlemi öncesinde yazdığım yorum hatalı olmuş şimdi farkettim. Orada değer yazdırma işlemi olmuyor arkadaşlar.

Yukarıda bazı temel operasyonları yapan fonksiyonları yazdık. Bunlar isteğe ve ihtiyaca göre arttırılabilir. Programın baştan sona tüm halini görmek için şuraya ışınlanabilirsiniz. Umarım faydalı olmuştur.