C ile Bağlı Liste,Stack(Yığın) ve Kuyruk Kullanımı (C Programlama Dili)
BAĞLI LİSTE(Linked List)
Bağlı liste, bellekteki her verinin aynı zamanda sıradaki veriyi işaret eden bir pointer yardımıyla birbirlerine bağlanmasıyla oluşan veriler dizidir.
Programda 10 elemanlı integer bir dizi tanımı yaptığımızda ( int Dizi; ) bellekten ardı ardına gelen 10 tane yer ayırmış oluyoruz.Yani Dizi 100 numaralı bellek adresinde tutulurken dizi 101 numaralı bellek adresinde tutuluyor ve böyle böyle ard arda sıralanmış 10 eleman var.
Peki şimdi bellekte 10 elemanlık boşluğun olduğunu ama ard arda 10 elemanlık bir boşluğun olmadığını varsayalım.Artık 10 elemanlı bir dizi tanımlayamayız.İşte tam bu noktada biz bellekten malloc ile herhangi bir yer isteyip istediğimiz yerleride birbirini işaret edecek şekilde bağlarsak sorunu halletmiş oluruz.Bunun adı da bağlı liste.
Bağlı listeler tek yönlü ve çift yönlü olmak üzere ikiye ayrılır;
Tek yölü bağlı listelerde her verinin işaretçisi, bir sonraki veriyi işaret eder.Son verinin işaretçisine ise NULL atanır.
Resimdeki büyük fontlu rakramlar veri, hemen yanlarındaki 4 basamaklı rakamlar ise bir sonraki veririn adresleridir.
Bir struct tanımlarız.Örneğin;
kayit *ilk, *son;
Burada kayit tipinde tanımlanan sonraki adlı pointer içerisinde her zaman bir sonraki verinin adres bilgisini taşıyacak.
ilk ve son olarak tanımladığımız işaretçiler ise ilk ve son kaydın adres bilgisini tutacaklar.Listeyi bellekte kaybetmemek için ilk ve son kaydın adres bilgisini devamlı bilmeliyiz.
Sonraki kayda ilerleme:
2 elemanlı bir listemizin olduğunu düşünürsek kayıtlarla işlemler şu şekilde yapılır;
ilk->sonraki = son;
İyi anlaşılması gereken nokta ise ilk ve son diye tanımladığımız işaretçilerin bir struct bilgisini barındırdıkları, sonraki adlı işaretçinin ise sadece struct içinde bir eleman pointer olduğudur.
kayit *sonraki, *onceki;// buraya dikkat 2 tane işaretçi var.
Önceki ve sonraki adlı iki işaretçi sayesinde iki yönlü olarak kayıtlara ulaşabilir veya yönlerin birinde bir kopma olduğunda programımız diğer yönden ilerleyerek verileri kaybetmemiş olur.Tek yölü olup da bir hata sonucu program çalışırken bağ kopsaydı verilerimiz uzay boşluğunda kayboşmuş gibi olacaktı.
Stack veri modelinde ilk giren eleman son çıkar(FILO) mantığı vardır.
Bağlı listemize eleman eklerken sona eklemeli, eleman çıkarırken yine sondaki elemanı çıkarmalıyız.
Stack içine eleman alımına “push”, eleman çekilmesine de” pop” deniliyor.
Örnek olarak bir işlem yazarken kullandığımız parantezleri verebiliriz.İlk açılan parantez son kapanır.Son açılan ise ilk önce kapanır.
Bu şekilde bir işlemdeki parantezlerin sağlamasını yapan programa buradan ulaşabilrisiniz.
Kuyruk veri yapısında ise ilk giren ilk çıkar(FIFO) mantığı vardır.
Bağlı listeye bir eleman ekleyeceksek sona eklemeli, eleman çıkaracaksak baştan çıkarmalıyız.
Örnek olarak banka kuyruğu verilebilir.İlk sıra fişini alanın işlemi ilk gerçekleştirilir.
Bu yazınında sonuna gelmiş bulunuyorum.Umarım faydalı bir yazı olmuştur.
Bağlı liste ile ilgili örnekleri ilerleyen günlerde paylaşmayı düşünüyorum.C Programlama Dili kategorisini takip edin:)
İlk ve Son Harfi Aynı Olan Kelimeleri Bulan C Kodu
Bağlı Liste İle Sıralı Ekleme
İşlem Parantezleri Sağlaması Yapan C Kodu
C’de Bağlı Liste İle Kayıt Fonksiyonları
C ‘de malloc, calloc, free, realloc Fonksiyonları
Ahmet Bahadır Yılmaz
teşekkürler çok faydalı oldu . kısa ve güzel bi biçimde anlatmıssınız