Tek Yönlü Bağlantılı Liste [C++]
-
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...
-
wasd fonksiyonlarda kullanmaya ozen goster. Ayrica OOP ile yaparsan daha iyi olur kendini gelistirmen acisindan
bir sey lzm olursa sorarsin.
Iyi calismalar
-
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 :)
-
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
-
Teşekkürler.
zamanında digital design dersinde bunlar bana saç baş yoldurmuştur :D
