Bağlı Liste, Yığın, Kuyruk Basit Anlatım
Tags: programming, computerscience, tutorial, beginners
Published: 2022-02-23 00:35:38



##**Bağlı Liste (Linked List)**

Verilerin **_array_** (sıralı liste) kullanarak organize edildiğini biliyoruz. Sıralı listelerde arama, ekleme, silme ve silme yapıyoruz. Eğer veriler sıralanmışsa listede bir öğeyi aramak çok zaman alır. Bu aramayı kısaltmak için **_binary_** (ikili) arama kullanılsa da bu durumda ekleme ve silme zaman alıcı hale gelir. Dizi boyutu işlem yaparken sabitleneceği için yeni öğeler, yalnızca yer varsa eklenir. Bu sorunları ortadan kaldırmak için **_pointers_** (işaretçiler) kullanılır.

Bağlantılı listeler, en basit ve en yaygın veri yapılarındandır. Bağlantılı listenin bir avantajı veri öğelerini depolamak gerekmediğinden, tüm yapının yeniden yapılandırılmasına gerek kalmadan liste öğelerinin kolayca eklenip çıkarılmasıdır.

**_Düğüm_** adı verilen bileşen koleksiyonudur. Her düğüm (son düğüm hariç) kendinden sonraki düğümün adresini içerir. Bu yüzden bağlantılı listedeki her düğümün iki bileşeni vardır.

- 1.Verileri (bilgileri) toplamak için.
- 2.Adresi depolamak için.

Listedeki ilk düğümün adresi ise ayrı bir konumda saklanır, **_baş_** veya **_ilk_** denir.

Düğümlerin sırasının, her düğümde depolanan **_bağlantı (link)_** adı verilen adrese göre belirlendiği, **_düğüm (node)_** adı verilen bir öğe listesi.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/22b96yck3salt0amtdud.png)

Her düğümdeki ok, işaret ettiği düğümün adresinin o düğümde depolandığını gösterir.
Son düğümdeki aşağı ok ise bu bağlantı alanının **_NULL_** olduğunu gösterir.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4pv4m8bvmtspqh5q0lhf.png)
 
Yukarıdaki bağlantılı listenin 4 tane düğümü vardır. İlk düğümün adresi işaretçi başlığında saklanır. Her düğümün 2 bileşeni vardır. İnfo bilgiyi saklamak için ve link bir sonraki düğümün adresini saklamak için.

İlk olarak, genel olarak bağlantılı bir listeyi ele alıyoruz. Okuduğumuz veriler sıralanmamışsa, bağlantılı liste sıralanmayacaktır. Böyle bir liste ileriye ve geriye doğru iki şekilde oluşturulabilir. İleriye doğru, bağlantılı listenin sonuna her zaman yeni bir düğüm eklenir. Geriye dönük olarak, her zaman listenin başına yeni bir düğüm eklenir.

##**Yığın (Stack)**

Yığınları, **_özyinelemeli (recursive)_** algoritmaları **_özyinelemeli olmayan (non-recursive)_** algoritmalara veya tam tersi olarak kullanabiliriz. Yığın öğelerin eklenmesinin ve silinmesinin yığının tepesi adı verilen yalnızca bir uçta gerçekleştiği homojen öğeler listesidir. Örneğin, bir kitap yığınında ikinci kitap yalnızca ilk kitap çıkarıldıysa çıkarılabilir.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mgherz1wo0mjazdqqn88.png)

Yığının en altındaki elemanlar en uzun yığında yer alır. Yığının en üst elemanı, yığına eklenen son elemandır. Çünkü öğeler bir uçtan (üstten) eklendiği ve kaldırıldığı için, en son eklenen öğe ilk önce kaldırılır. Bu yüzden bir yığın aynı zamanda **_Son Giren İlk Çıkar (LIFO)_** veri yapısı olarak da adlandırılır.

Yığına yeni öğeler eklenebildiğinden yeni bir öğe eklemek için **_push_** adı verilen ekleme işlemini gerçekleştiririz. Yığından yeni öğeler alınabildiğinden veya kaldırılabildiğinden yığının en üst öğesini almak için **_top_** işlemini, en üst elemanı çıkarmak için **_pop_** işlemini gerçekleştirebiliriz.

##**Kuyruk (Queue)**

Öğelerin bir ucundan eklendiği, diğer ucundan silindiği veri yapısı. **_İlk Giren İlk Çıkar (FIFO)_** veri yapısı.
Öğelerin bir uçta eklendiği, **_arka (back-rear)_** olarak adlandırılan ve diğer uçtan silindiği **_ön (front)_** adı verilen aynı türden öğeler kümesidir.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h52ei5jnmh0smkiakh8y.png)

Örnek olarak para yatırma ve çekme işlemi yapmak için sırada bekleyen insanları düşünelim, her yeni müşteri bir öncekinin arkasına sıraya girer. Yeni bir müşteri geldiğinde hattın önündeki müşteriye hizmet verilir. 

Kuyruğa her yeni öğe eklendiğinde kuyruğun arkasına, kuyruktan her öğe silindiğinde kuyruğun önüne erişilir. Yığında olduğu gibi, kuyruk öğeleri bir dizide saklansa bile kuyruğun orta öğelerine erişilemez. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9mwr4h7ury20cjn5lvkj.png)