• Bağış
  • Linked List (Linkli Liste veya Bağlı Liste)

    Bağlı liste herhangi bir tipten node’ların (düğümlerin) yine kendi tiplerinden düğümlere işaret etmesi (point) ile oluşan zincire verilen isimdir. Buna göre her düğümde kendi tipinden bir pointer olacak ve bu pointerlar ile düğümler birbirine aşağıdaki şekilde bağlanacaktır.

    bagli liste
    Linked List’in avantajı, hafızayı dinamik olarak kullanmasıdır. Buna göre hafızadan silinen bir bilgi için hafıza alanı boşaltılacak veya yeni eklenen bir bilgi için sadece o bilgiyi tutmaya yetecek kadar hafıza alanı ayrılacaktır.

    Yukarıdaki figürde görülen bağlı listeye çok benzeyen ve yine çok kullanılan bir bağlı liste uygulaması da çift bağlı liste (doubly linked list) uygulamasıdır.
    Çift bağlı liste

    Buna göre her düğüm, hem kendinden öncekine hem de kendinden sonrakine bağlanır, bu sayede liste üzerinde ileri ve geri ilerlemek mümkündür.

    Bağlı listelerin nesne yönelimli programlama dillerinde pointer tipi bulunmamasından dolayı kodlanması biraz farklıdır. Bilindiği gibi C++ gibi melez (hem C hem de nesne yönelimli programlamayı destekler) diller dışında JAVA, C# gibi dillerde gösterici (pointer) bulunmaz. Bunun yerine nesne göstericisi (object referrer) bulunur. Bu değişken tipleri esas olarak bir sınıf(Class)‘dan türetilmiş bir nesneyi(object) gösterebilen değişkenlerdir. Bu değişkenlerin aslında birer göstericiden farkı yoktur.


    Örnek Bağlı liste kodları:

    Basit bir bağlı liste örnek kodu 10 adet sayı ekleyerek ekrana basan kod
    Basit bir bağlantılı liste örnek kodu NULL kontrolü ile 10 adet sayı ekleyerek ekrana basan kod. Liste boyutu bilinmiyorken liste sonuna kadar gider.
    Bir bağlı listede arama yapan kod Arama sonucunda bulunna düğümün işaretcisini döndürür.
    Circular (dairesel) Bağlı liste Dairesel bağlı listeye 10 sayı ekleyerek ekrana basar.
    Çift Bağlı liste Çift yönlü bağlı listeye 10 sayı ekleyerek listenin ters bağlantısı üzerinden listeyi ters basan kod.

    Çift Bağlı Dairesel listeye ekleme ve listeden silme yapan fonksiyon kodları.

    Dairesel Tek yönlü bağlı listeye ekleme yapan, sıralı ekleme yapan ve silen kod.

    “Visual Studio 2008 express edition” ile dairesel tek yönlü bağlı liste kodu

    Benzer Yazılar:

    Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Linked List (Linkli Liste veya Bağlı Liste)' isimli yazı 03 May 2007 tarihinde, saat: 02:50 'de �adi Evren �EKER tarafından gönderilmiş, toplam 6240 defa okunmuştur.

    Benzer yazıları C/C++, Programlama Dilleri, veri yapıları kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


    Category: C/C++, Programlama Dilleri, veri yapıları
    15 responses to “Linked List (Linkli Liste veya Bağlı Liste)”
    1. [...] detayları ile ilgili bilgisinin olmasını gerektirmemesidir. Örnek soyut veri tipleri olarak bağlı liste , stack , queue , kompleks sayılar , kümeler [...]

    2. [...] liste üzerinden verilerin nasıl eklenip çıkarıldığı tasvir edilmiştir. Bir sıra için bağlı liste kullanılabileceği gibi dizi (Array) de kullanılabilir. Ayrıca yukarıdaki bağlı listede, [...]

    3. Fatih Kabakci says:

      hocam merhabalar,
      while(temp->next!=(node*)0),Arama kodunda bulunan kodun bu parcasinda,dongunun parametresi olarak bu sekil yazilmasinin,
      while(temp->next!=NULL) bu sekilde yazilmasindan islevsel olarak farki varmidir?

    4. Şadi Evren ŞEKER says:

      Null, NULL, nil veya null olarak yazılan sabit değer, her dilde tanımlı değildir. Bu yüzden kodda bulunan
      (node *) 0

      ifadesi, sayısal değer olarak 0 tam sayısını node * göstericisine tip inkılabı yapmakta (type casting) ve bu şekilde kullanmaktadır. Yukarıdaki bu tanım, her dilde (null değeri her nasıl tanımlıysa veya hiç tanımlı değilse bile) çalışması için yapılan ufak bir hiledir.

    5. Ahmet says:

      Sadi Bey circular tek yönlü bağlı listeden eleman silen kodu bu bolumde yayinlayabilirmisiniz ?

    6. kemal says:

      Çift Bağlı Dairesel listeyi visual studio 2008 de açtım ama nasıl çalıştıracam arkadaşlar bu konuda acil yardım

    7. Şadi Evren ŞEKER says:

      Kodun nasıl derlenip çalıştırılacağı aşağıdaki yazıda açıklanıyor:

      http://www.bilgisayarkavramlari.com/2008/10/06/c-ile-kodlama/

      Belki karşılaştığınız problem veya hataları yazarsanız daha fazla yardımcı olabiliriz. Kodların tamamı Dev-CPP ile test edilmiş ve çalışan kodlardır.

      başarılar

    8. Şadi Evren ŞEKER says:

      Ahmet beyin isteğine binaen yukarıya diaresel tek yönlü bağlı liste (circular singular linked list) kodu ekledim. Bu kodda insert fonksiyonu sıradan sayı eklerken, insert2 fonksiyonu sıralı bir şekilde listeye sayı ekler (büyükten küçüğe). Ayrıca del fonksiyonu da sizin istediğiniz silme işlemini yapıyor.

      umarım yardımcı olur

      başarılar

    9. gardiann says:

      merhaba; bu linked listin oncesinde bağlantılı olarak
      files of records
      fixed lenght records
      variavle lenght records file organization başlıklarıda var aslında onlarla ilgili bildiğiniz bir site turkçe olucak ama var mı lütfen!!! ??

    10. Fatih Kabakcı says:

      node *DoublyListDel(node *kutu,int data) {
      node *iter=kutu;
      while(iter->next!=NULL) {
      if(iter->next->data==data) {
      node *temp=iter->next;
      iter->next=iter->next->next;
      temp->next->prev=iter;
      free(temp);
      }
      iter=iter->next;
      }
      if(kutu->data==data) {
      node *root=kutu->next;
      root->prev=NULL;
      free(kutu);
      return root;
      }
      }
      return kutu;
      }
      Hocam Doubly listte eleman silerken yazmis oldugum bu kodda,son elemani silmek isterken sorun ile karsilasiyorum.yukaridaki while dongusunun cikisina if(iter->data==data)kosulu ekleyerek duzeltmeye calistim ama olmadi.Hatam nerdedir sizce?

    11. Şadi Evren ŞEKER says:

      doğrudur, çünkü fonksiyonunuzun içerisinde bir döngü ile iter->next’in null olması durumunu kontrol etmiş ve ancak bundan farklı birdurumda döngünün dönmesini söylemişsiniz.

      Şayet listesnizde tek eleman kaldıysa bu döngüye girmez (tek elemanın next’i null’dır). Bu durumda silme işlemi de gerçekleşmez.

      Bu tip durumlarda döngüden önce veya sonra, bu durumu kapsayan özel bir if koşulu yazmanızı tavsiye edebilirim.

      Başarılar

    12. hayal says:

      merhaba bana circular list ile ilgili bi uygulama lazım ekleme silme arama kodlarınıda içeren yardımcı olabilir misiniz?

    13. Şadi Evren ŞEKER says:

      bahsettiğiniz işlemlerin tamamını yapan kod zaten yukarıdaki yazı içerisinde bulunan bağlantıda var ve bu konuda sizden önce sorulan soruları okursanız oradaki bir ikişini isteği üzerine eklemiştim. Yine de bu kod işinizi görmüyorsa belki tam olarak istediğiniz koddan bahsederseniz yardımcı olmaya çalışabilirim.

      başarılar

    14. hayal says:

      visual studio 2008 ile çalışıyorum ben

    15. Şadi Evren ŞEKER says:

      Tekrar ediyorum yukarıdaki yazı içerisinde istediğiniz kod var. Kodlar ayrıca visual studio ile de çalışıyor.

      Kodları visual studio ile açmada sorun yaşadığınızı düşünerek, Visual Studio’da nasıl açaılacağını anlatan bir yazı yazıp yayınladım (ilgili yazıya dev-cpp-projelerinin-visual-studio-ile-acilmasi bağlığına tıklayarak ulaşabilirsiniz). Ayrıca sizin istediğiniz kodun, yani dairesel tek yönlü bağlı listenin (circular linked list) kodunu bir visual studio projesi haline getirip yukarıya bağlantısını ekliyorum.

      Umarım yardımcı olur

      başarılar

    Leave a Reply