Veri yapıları dersinin ilk konusu olan Listeler, günümüzde bir çok algoritma veya yazılım içerisinde kullanılmaktadır. Bağlı Liste, Dairesel Bağlı Liste, Çift Yönlü Bağlı Liste ve Çift Yönlü Dairesel Bağlı Liste olarak 4 başlık altında incelenebilir. Öncelikle neden diziler varken listelere ihtiyaç duyduğumuzu kısa bir şekilde ifade edeyim. Listeler eleman kadar alan kaplamaktadır. Diziler ise başlangıçta kaç eleman alacak şekilde tanımladı iseniz o kadar alan kullansanız da kullanmasanız da yer işgal etmektedir. Listeler ile bu alandan tasarruf sağlanmaktadır ve biz eleman ekledikçe kullanılan alan artmaktadır.
Tek Yönlü Bağlı Listeler
Her eleman(düğüm,node) bir sonraki elemanı gösterir.
Sadece baştan sona ilerleme olur.
Son eleman null gösterir. Yeni bir bağlı liste yapısını C dili ile görelim. C dilinde alan oluşturmak için malloc fonksiyonu kullanılır. Aşağıdaki kod yeni bir düğüm(node) oluşturacağımızı ve bunun için hafızadan alan istediğimizi belirtmektedir. Sınavlarda genelde bu kısım verilir daha çok bu düğümün içini doldurmayı sorarlar.
struct node* createNode() { struct node* newNode = (struct node*)malloc(sizeof(struct node)); return newNode; }
Bu kısımda içini oluşturduğumuz kısım. Hafızadan yeri aldık ama ne yapacağız içine bilgi(veri, data) gireceğiz.
struct node{ int bilgi; struct node *sonraki; };
Java dili bağlı liste yapısı:
public class ListNode { int bilgi; public ListNode sonraki; }
Tek Yönlü Bağlı Liste Başa Eleman Ekleme
Listelerde ilk durumu gösteren bir başlangıç ifadesi bulunmaktadır. Burada da Baş diye yazdığım kısım listenin başlangıcını gösteren ifadedir. Burada D(node) 8(sonraki elemanın adresi)’i başa ekleyeceğiz.
Baş değeri D’nin adresini D ise A’nın adresini göstermesi gerekiyor. Son durumu alta ekliyorum.
Java dili ile Başa Ekleme kodu:
Kuyruk = diğer düğümün adresinin tutulduğu kısım.
class Dugum { public int veri; //örnek amaçlı int siz isterseniz string yapabilirsiniz public Dugum adres; public void yazdir(){ System.out.print(" "+veri); } } class BListe { private Dugum ilk,son; public BListe(){ // Bir Bliste nesnesi oluşturulduğunda ilk=null; //boş liste oluşturur. } public void basaEkle(int data){ //Listenin başına eleman eklemek için Dugum yeni = new Dugum(); yeni.veri=data; yeni.adres=ilk; ilk=yeni; } }
Tek Yönlü Bağlı Liste Sona Eleman Ekleme
Sona eleman eklerken son değerdeki null değerini silip son elemanın adres kısmına yeni eklenen değerin adresini ekliyoruz. Eklenen elemanın ise adresi null olacaktır.
public void sonaEkle(int data) { Dugum yeni=new Dugum(); yeni.veri = data; yeni.kuyruk=null; //adres gösterdiği kısmı null yaptık if(ilk=null) { ilk=yeni; son=yeni; } else { son.kuyruk=yeni; son=yeni; } }
Tek Yönlü Bağlı Liste Araya Ekleme
Bu durumda ise önceki düğümün kuyruğu yeni eklediğimizin düğümün adresini, yeni eklediğimiz düğümün de kuyruğu sonraki düğümü gösterecektir.
Tek Yönlü Bağlı Liste Sondan Eleman Silme
Bu durumda ise sondan bir önceki düğümün kuyruğunu null yapıyoruz.
Tek Yönlü Bağlı Liste Baştan Eleman Silme
Bu durumda da baş’ın(root) kuyruğunu silinen düğümün bir sonraki olacak şekilde değiştiriyoruz.
Tek Yönlü Bağlı Liste Ortadan Eleman Silme
Bu durumda ise silmek istediğimiz elemandan önceki elemanın kuyruğundaki adresi, silmek istediğimiz elemanın adresine gidecek şekilde değiştiriyoruz.
Silme işlemleri ekleme işlemlerine göre daha basit yapıdadır. Ekleme işlemlerini de umarım anlamışsınızdır. Eğer vakit bulabilir isem kod yazmadığımız başlıkların da kodlarını veya görsel olarak ifadelerini ekleyeceğim. Umarım faydalı olmuştur.