C Progamlama Dili Çift Yönlü Bağlı Liste Ekleme Fonksiyonu
Bu yazımızda c programlama dili veri yapıları çift yönlü bağlı liste konularının başlangıcını yapacağız. İlk konumuz çift yönlü bağlı liste ekleme fonksiyonu olacak. Daha sonraki konularda da silme, listeleme, vb. konuları bulabilirsiniz. Şimdi öncelikle kodumuzu üzerine işleyeceğimiz struct yapısını gösterelim.
1
2
3
4
5
6
7
|
typedef struct list {
int sayi;
struct list *onceki;
struct list *sonraki;
} liste;
liste *ilk = NULL, *yeni = NULL, *son = NULL;
|
Çift yönlü bağlı listemizin struct yapısı tek yönlüden tek farklı olarak struct veri tipimizde ikinci bir pointer tutması olarak söyleyebiliriz. Daha basit şekilde anlatmak gerekirse, tek yönlü bağlı listede sürekli ileriye doğru gidebiliyorduk ve bunu da “sonraki” adlı pointer değişkeni ile yapıyorduk. Çift yönlü bağlı listede ise hem ileri hem geri gidebiliyoruz bunu da “onceki” adlı pointer değişkeni ile yapabiliyoruz.
Şimdi de ekleme işlemini yaptığımız kodumuza bakalım.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
void ekle(int veri) {
yeni = (liste *) malloc(sizeof (liste));
yeni->sayi = veri;
yeni->sonraki = NULL;
if (ilk == NULL) {
ilk = yeni;
son = ilk;
ilk->onceki = NULL;
} else {
son ->sonraki = yeni;
yeni->onceki = son;
son = son->sonraki;
}
}
|
- ekle fonksiyonumuza bakacak olursak bir tane integer veri tipinden “veri” adında bir değişken almakta.
- İşimizi daha da pratikleştirmek adına struct veri tipinde oluşturduğumuz “yeni” adlı değişken için bellekte (RAM) yer ayırıyoruz.
- Artık “yeni” adlı değişkenimize değer ataması yapabilir duruma getirdik. Fonksiyona gönderdiğimiz integer değeri “yeni” değişkeninin “sayi” değişkenine atıyoruz.
- sonraki pointer değerini ise NULL olarak atıyoruz.
- Sonrasında if deyimi ile “ilk” adlı pointerı kontrol ediyoruz. Eğer boş ise listede eleman yoktur anlamına gelir ve ilk atamayı buraya yaparız.
- Bu nedenle “ilk” boş olması durumunda “yeni” pointerını “ilk” pointer değerine atıyoruz.
- son düğümü de tutmak istiyoruz. Bu yüzden “ilk” değişkenini “son” değişkenine atıyoruz.
- Daha sonrasında ise ilk düğümün öncesini tutan “ilk->onceki” değişkenine NULL ataması yapıyoruz.
- Eğer ki ilk düğüm boş değil ise bundan sonraki işlemleri “son” değişkeni ile yapıyoruz. Yani sürekli son düğüme ekleme yapıyoruz.
- son düğümü tutmamızın sebebi tamamen daha pratik olmasından kaynaklanıyor. Bunu bir while döngüsü ile de en son düğüme gidip yapabilirdik ama bu yöntem daha pratik oluyor.
- Listemizin sonuna eleman ekleme yapmak için “son” değişkeninin sonrasına yani “son->sonraki” değişkenine “yeni” değişkenini atarız.
- Ancak çift yönlü bağlı listemiz olduğundan “yeni” değişkeninin öncesini yani “yeni->onceki” değişkenine de “son” değişkenini atıyoruz.
- En son adımda ise artık son düğümümüz değiştiği için önceki “son” değişkenini bir ileriye atıyoruz. Yani “son = son-> sonraki” diyerek son düğüme geçiş yapmış oluyoruz.
Veri yapıları çift yönlü bağlı liste ekleme fonksiyonu burada tamamlanmış oluyor. Yukarıdaki kodu kendi yazdığınız koda ekleyerek kullanabilirsiniz. Daha sonraki fonksiyonlar için sitemizi takip etmeye devam edin…