folder Tahribat.com Forumları
linefolder C - C++
linefolder Tek Yönlü Bağlantılı Liste [C++]



Tek Yönlü Bağlantılı Liste [C++]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Bağlantılı liste veriyi bellekte düzenli bir şekilde tutmak için kullanılan veri yapılarından birisidir. Ve listeler düğümlerden oluşur, her bir düğüm kendine ait veriyi ve bir sonraki düğümün bellek adresini tutar.

    "Veriyi tutuyoruz da bir sonraki düğümün bellek adresi ne alaka?" bir sonraki düğümün bellek adresini tutmamızın sebebi pointerlarla çalışıyor olmamız ve veriye değişkenlerle değil de direk bellek üzerinden eriştiğimiz için bellek adresini tutmalıyız ki listedeki elemanların sırası bozulmasın(daha doğrusu liste kopmasın) ve istediğimiz elemana ulaşabilelim.

    Bu mantık okullarımızda genelde kıllatıla kıllatıla yahut yarım yamalak anlatıldığından anlamıyoruz ama gayet basit(miş).

    Şöyle ki;

    bir düğüm yapısı oluştur struct yahut class ile

    bu yapıya ait iki şey olsun,biri değer bir diğeride bir sonraki değer tutulacak düğümün bellek adresi

    ilk düğümü oluştur,değerini ata ve bir sonraki düğüme 0 değerini atayarak sonraki düğümü belirle(listenin rastgeleleşmemesi için)

    daha sonra aynı işlemi gerçekleştirmeye devam ederek listeni oluştur verilerini düzenli bir şekilde tut bellekte.

    Görsel olarak;

    Kod kısmı;

    #include <iostream>
    using namespace std;
    
    struct node {
      int x;
      node *next;
    };
    
    int main()
    {
      node *root;       // liste başını kaybetmememiz için ilk adres burada tutuluyor
      node *conductor;  // This will point to each node as it traverses the list
    
      root = new node;  // Sets it to actually point to something
      root->next = 0;   //  Otherwise it would not work well
      root->x = 12;
      conductor = root; // Kondüktör ilk noktayı işaret ediyor
      if ( conductor != 0 ) {
        while ( conductor->next != 0)
          conductor = conductor->next;
      }
      conductor->next = new node;  // Listenin sonunda yeni bir düğüm oluşturuluyor
      conductor = conductor->next; // Oluşturduğumuz düğüm işaret ediliyor
      conductor->next = 0;         // Listenin gelişigüzel gitmemesi için son eklediğimiz düğümden sonraya 0 atanıyor.
      conductor->x = 42;
      conductor->next = new node;  // Listenin sonunda yeni bir düğüm oluşturuluyor
      conductor = conductor->next; // Oluşturduğumuz düğüm işaret ediliyor
      conductor->next = 0;         // Listenin gelişigüzel gitmemesi için son eklediğimiz düğümden sonraya 0 atanıyor.
      conductor->x = 31;
      //Burdan sonra kondüktörü başa taşıyıp yazdırma işlemini yaptırıyoruz.Bu kod bloğunu yazdırma fonksiyonu olarak kullanıyoruz.
      conductor = root;
      if ( conductor != 0 ) {             //Bir başlangıç noktası olup olmadığı kontrol ediliyor
       while ( conductor->next != 0 )     //bu if burda olmasada olur ancak olası hataların önüne geçmek için kullanılıyor
      {
        cout<< conductor->x<<endl;
        conductor = conductor->next;
      }
      cout<< conductor->x<<endl; //while son elemana geldiğinde durduğu için son elemanı bu satırla yazdırıyoruz
    }
      system("PAUSE");
    }
    

     


    Çalıştırın deneyin uğraşın. Sadece bundan ibaret değil; ekleme, çıkarma, araya ekleme,aradan çıkarma gibi işlemler de var.(mesela yazdırma işlemini de fonksiyon yapabilirdik ya da ilk düğüm oluşturma işini kurucu bir fonksiyonla halledebilirdik)

    Kodların bulunduğu(benim çalıştığım) sayfa: http://www.cprogramming.com/tutorial/lesson15.html

    olabildiğince anlatmaya çalıştım, kusurum varsa affola...


    :)
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dhmm
    dhmm's avatar
    Kayıt Tarihi: 15/Eylül/2011
    Erkek

    wasd fonksiyonlarda kullanmaya ozen goster. Ayrica OOP ile yaparsan daha iyi olur kendini gelistirmen acisindan

    bir sey lzm olursa sorarsin.

    Iyi calismalar


    Ozgurluk aslinda her istedigini yapabilmek degildir, istemedigini yapmamaktir. // Verdigin degeri gormeyince, gordugun degeri ver !!! // Hayatin herkes icin bir bavulu vardir !!! // Dusmek gerekir bazen hayatta; kalkmayi ogrenebilmek icin
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    yok örneği ben yazmadım ben sadece açıklamaları Türkçeye çevirdim birde o yazdırma kısmıyla main kısmını birleştirdim o kadar. Veri yapılarının teorisini masal gibi anlatıp durdular ama pratikte hep tutuldum kaldım,onun için şunları böyle böyle hem ben öğreneyim hem de anladığım kadarıyla kendi ağzımdan anlatayım ki başkalarınında işine yarasın dedim. Yardıma ihtiyacım olunca konu açıyorum ama yinede bi sıkıntı olursa pm atarım çok sağol :)


    :)
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek

    unide paso bu kutulari cizip hoca bisiler anlatio ve ben magradan cikmis gibi hissediodum kendimi :D valla suan hassiktir olay bumuymus lan die sitemde bulundum eyw murid saolasin valla benim isime yaradi


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wm-t
    wm-t's avatar
    Kayıt Tarihi: 05/Nisan/2007
    Erkek

    Teşekkürler.

    zamanında digital design  dersinde bunlar bana saç baş yoldurmuştur :D

Toplam Hit: 2356 Toplam Mesaj: 5