Algoritma Geliştirme ve Veri Yapıları 7 Liste ve Bağlantılı Liste
Liste birbiriyle ilişkili verileri içeren bir kümedir, programlama açısından liste en basitinden bir dizi üzerinde tutulur. Dizi elemanları art arda gelen bellek gözlerinde tutulur. Bağlantılı liste ise aynı kümeye ait verilerin birbirlerine bellek üzerinde sanal bağlar ile bağlanması ile oluşur. Bağlantılı listenin zayıf yönü, liste üzerindeki ara elemanlara kolayca erişilememesi ve sık sık arama gerektiren uygulamalarda arama karmaşıklığının göreceli olarak büyük olmasıdır.
Uzunluk: Liste üzerindeki düğümlerin sayısıdır. Anahtar Sözcük: Liste üzerinde arama yapılacağı veya listenin sıralanacağı durumlarda kullanılacak veri parçasıdır. Öncelikli Liste: Listeye yeni verilerin eklenmesi işleminde eklemenin bir bir anahtar değere göre sıralı yapılmasıdır(öğrenci numarasına göre). Boş Liste: Liste veya bağlantılı listenin hiçbir elemanı olmaması; üzerinde hiçbir veri tutulmamasıdır. Bu durumda ilk ve son işaretçilerinde boş anlamında NULL değer tutulur.
Bağlantılı liste türleri: otek Yönlü Bağlantılı Liste Birbirini izleyen düğümler arasında tek-yönlü bir bağlantı vardır. Ekleme, arama, listeleme gibi işlemlerin karmaşıklığı O(n) dir. Listenin oluşturulması için iki tane işaretçi kullanılırsa ekleme karmaşıklığı O(1), arama ve listeleme karmaşıklığı O(n) olur.
Bağlantılı liste türleri: o Çift Yönlü Bağlantılı Liste Düğümler arasındaki bağlantı hem ileri hem de öne doğru ilerleyecek şekilde iki yönlüdür. Yani bir düğüm hem bir sonraki hem de bir önceki düğümü işaret eder. Çift yönlü bağlantılı liste araya ekleme ve silme işlemlerini de kolaylaştırır. Çünkü silinecek düğümün hem arkasındaki hem de önündeki düğüm bilindiği için silmeyi sağlayacak bağlantı düzenlemesi kolayca yapılır.
Bağlantılı liste türleri: oçevrimsel Bağlantılı Liste Düğümler arasında çevrimsel bir bağlantı vardır. Yani listenin son düğümü ilk düğümünü işaret eder. Böylece çevrimsel bir yapı oluşturulur.
Liste ve Bağlantılı Liste
Gereksinimler o İşaretçi değişkenler ve liste için gerekli veri yapısının tanımlanması o Dinamik bellek ihtiyacı Bellek ihtiyaçları malloc() veya benzeri bir fonksiyon ile sağlanır belleğin kullanımının ardından free() veya benzeri bir fonksiyonla bellek kullanımı durdurulabilir.
Dinamik bellek kullanılması sebebiyle tanımlamalar işaretçi kullanılarak gerçekleştirilir. Bağlantılı liste boş iken her iki değerde NULL dur. İlk eleman içi bellekten yer tahsis edilmesi şekilde gösterilmiştir. Oluşturulan elemanı bellek yönetimine geri iade etmek için free(p) fonksiyonunu kullanmak yeterlidir.
Bağlantılı Liste Veri Yapısı struct baglantililiste{ int sayi; struct baglantililiste *arka; }; struct baglantililiste *ilk=null, *son=null; baglantililiste *p; p=(baglantililiste *)malloc(sizeof(struct baglantililiste));
Ekleme işlemi baglantililiste *p=(baglantililiste *)malloc(sizeof(struct baglantililiste)); if(p!=null){ if(ilk==null){ ilk=p; son=p; ilk->arka=null; son->arka=null; }else{ son->arka=p; son=p; p->arka=null; }}
Listeleme İşlemi baglantili *adr =ilk ; while(adr!=null) { cout<<(adr->sayi)<<endl; adr=adr->arka; }
Silme İşlemi baglantili *adr=ilk,*onceki=ilk,*silinecekveri=silinecek; while(adr!=null){ if(adr ==silinecekveri){ onceki->arka=adr->arka; free(adr); Break; } onceki=adr; adr=adr->arka; }