İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. SDN Programlama Kafe
SDN Programlama Kafe

Bağlı liste (linked list) yardım

cnak24.11.201012 cevap4.947 görüntüleme
2010'den beri14 mesaj
#1
bağlı listeyle ilgili bilgi almak istiyorum fakat elimdeki kitapta bu konu yok.internette de öğretici yazılar ve örnekler bulamadım malum anlaşılması da zor bir konu.mesela elimde bir metin var ve kelimeleri bağlı listeye atmak istiyorum bunu yapmak için ne düşünmeliyim nasıl bir yol izlemeliyim.bağlı listelerin kullanımından bahsedermisiniz.
Cevaplar
2007'den beri17 bin mesaj
#2
Pff çok gıcık bir konu. Anlat anlat bitmez. Bir sürü çeşidi var. Aklımda kalan çok az şey var ama onu da tarif etsem sanırım yanlış bilgi vermiş olurum. Ama işin hammallığından başka bir şey değil linked listler. Kullanacağını hiç sanmam...
2010'den beri4 mesaj
#3
bağlı listede her eleman kendinden sonraki elemanın dizideki yerini gösteren bilgiye sahiptir. Çift yönlü listede ise, her eleman kendinden önceki ve sonraki elemanları gösterir. Linked List'e hamallık diyen, hiç kullanılmaz diyen insan bence börekçi salonu açsın daha iyi, bıraksın teknoloji işlerini. Dosyalama sistemleri tamamen bu linked list mantığına göre kuruludur. İşletim sisteminde processler işlemciye dispatch edilmeden tutulduğu listeler linked listtir. Hangi dilde uygulama geliştiriyorsan söylersen linked list örnek kodu verebilirim.

Not: Sürekli SDN'i takip ederim ama üye olmamıştım hiç. Aşırı saçma şeylerden bahsedenler görmüştüm de bu kadarına da dayanamayıp yorum yaptım, hatam varsa affola.
2007'den beri17 bin mesaj
#4
yildirim234 dedi: ↑
bağlı listede her eleman kendinden sonraki elemanın dizideki yerini gösteren bilgiye sahiptir. Çift yönlü listede ise, her eleman kendinden önceki ve sonraki elemanları gösterir. Linked List'e hamallık diyen, hiç kullanılmaz diyen insan bence börekçi salonu açsın daha iyi, bıraksın teknoloji işlerini. Dosyalama sistemleri tamamen bu linked list mantığına göre kuruludur. İşletim sisteminde processler işlemciye dispatch edilmeden tutulduğu listeler linked listtir. Hangi dilde uygulama geliştiriyorsan söylersen linked list örnek kodu verebilirim.

Not: Sürekli SDN'i takip ederim ama üye olmamıştım hiç. Aşırı saçma şeylerden bahsedenler görmüştüm de bu kadarına da dayanamayıp yorum yaptım, hatam varsa affola.
Yahu işin hammallığı tabi. Kim linked list hazırlamak için kasar ki. Zaten frameworkler ile her şey basite indirgendi. Gerekli bir şey olduğunu biliyorum ama bu kadar da geriye gitmeye gerek yok. Frameworkler ile zaten herşeyi otomatik yapabiliyorsun...
2010'den beri1 mesaj
#5
yildirim234 eline sağlık
millet 2ghz 1gb ram li makinalara kod yazarak kendini programcı saydığından:) framework yapar tabi:)
2010'den beri4 mesaj
#6
Programlama biliyor musun bilmiyorum ama framework kelimesini bildiğin kesin, aferin sana. Bir veri yapısını kullanman için bir kütüphane sana gerekli fonksiyonları, constructerları ve diğer araçları sunabilir, tekerleği yeniden keşfetmekten de iyidir, kullanılırsa çok da güzel olur. Ancak hiç bir veri yapısını bilmeden kullanamazsın. Ne olduğunu öğrenmek için oturur bir incelersin neymiş ne değilmiş, sonra kendin implemente edersin. Sonra nerde ihtiyacın olursa ister o kütüphaneyi kullanırsın ister başkasını.

Ama gidip de 4 mhz hızında bi mikrocontrollerda çalışırsan, bir işletim sistemi yazarsan veya buna benzer alt seviye işler yaparsan o framework para etmez ona göre. Sana önerim ilk önce "bilgisayar nedir" konulu makaleler okuyarak bu işlere başlayabilirsin.
2007'den beri17 bin mesaj
#7
Oturup işletim sistemi yazacak yada alt seviye bir iş yapacak değilim. Linked listleri de veri yerleştirme çıkartma yöntemlerini de bilirim. O kadar geri gitmeye emin ol gerek yok. İşin fantezisinden öteye gitmezsiniz. Günümüz compilerları zaten arrayleri gayet kullanışlı hale getirdi. Yeni dillerin üzerine frameworkler kullanılarak her şey daha pratik hale getirildi.

Bu saldırgan tavrından da vazgeç. Kimin neyi ne kadar bildiğini asla bilemezsin :) Klavye başından konuşmak kolaydır :)
2010'den beri4 mesaj
#8
bunları baska yerde söyleme, gülerler.
2007'den beri17 bin mesaj
#9
yildirim234 dedi: ↑
bunları baska yerde söyleme, gülerler.
Olur bay çok bilmiş :)
2009'den beri44 mesaj
#10
Merhaba mesela şöyle bir yapı oluşturduğunuzu varsayalım :
struct List
{
int val;
struct List * next;
};
typedef struct List Node;
Node *curr, *head;

Bu yapı içinde tuttuğunuz 2 şey var.
1. val adında bir integer.
2. List yapısı türünde next adında bir pointer.
Belki tam karşılığı olmasa bile;
atiyorum int a = 5; kodunda, hafızada 4 bytelik bir yer açılır içinede 5 yazılır.
sonra bu a denen şeye, hafızada 4 bytelık açılan yerin adresi atanir.
Burdada siz bu yukarıdaki yapıyı çağirdiğinizda,
hafızada içinde tuttuğunuz şeylerin boyutu kadar bir yer açılacak.
Sonra hafızada yer açılan adres oluşturduğunuz şeye atanacak.

Örnek vermek gerekirse:
curr = (Node *) malloc (sizeof(Node));
sizeof(Node) : List yapısı için gereken boyutu belirtir
malloc(int boyut) : hafızada, boyut kadar yer açar.
Node * : List tipinde bir pointer olduğunu belirtir.

Yani :
Node tipindeki curr adlı pointer a
1 - Node Yapısının Boyutu Belirlenir
2 - Bu Boyutta Hafızada Bir Yer Açılır
3 - Yer Açılan Adres Değeri Pointer'a Atanır
4 - Bu Adres curr'e eşitlenir

Linked listin temeli ihtiyacınıza göre belirlediğiniz bir yapıyı oluşturup,
İçine belli değerler girip, next pointerında başka Bir Node un adresini göstermektir.

Örneğin:
--------------
#include <stdio.h>
#include <stdlib.h>
// Yapinin Olusturulmasi
struct List
{
int val; // int degeri
struct List * next; // List yapsini gosteren Pointer
};
typedef struct List Node; // Node Adini Vererek Bu Yapiyi Olustur
Node *curr, *head; // Bu Yapiyi gosteren curr ve head adinda degiskenler olustur

void listeninBasinaNodeEkle(int deger)
{
// Yeni Bir Node Yarat
Node* tmp = (Node *)malloc(sizeof(Node));
// Node'un degerini Belirle
tmp->val = deger;
// Node'un Bir Sonraki Gosterdigi Nodeu head olarak Ayarla
tmp->next = head;
// head'i eklenen Node yap
head = tmp;
}

void listeninSonunaNodeEkle(int deger)
{
// Su Anki Nodeun Degerini Belirle
curr->val = deger;
// Yeni Bir Node Yarat
Node *tmp = (Node*)malloc(sizeof(Node));
// Node'un Bir Sonraki Gosterdigi Node'u NULL Olarak Ayarla
tmp->next = NULL;
// Su Andaki Node'un Bir Sonraki Gosterdigi Node'u Ayarla
curr->next = tmp;
// Su Andaki Node'u Ayarla
curr = tmp;
}

void listeyiBas()
{
// Ilk Node'a don
curr = head;
// Listenin Sonuna Kadar Git
while (curr->next != NULL)
{
// Node'un Degerini Bas
printf("%d ",curr->val);
// Node'u Ilerlet
curr = curr->next;
}
printf("\n");
}

void ara(int deger)
{
// Ilk Node'a Don
curr = head;
// Pozisyon Degeri
int pos = -1;
// Bulunma Degeri
int found = 0;
// Listenin Sonuna Kadar Git
while(curr->next != NULL)
{
//Poziyonu Ata
++pos;
if (curr->val == deger)
{
printf("%d %d Pozisyonunda Bulundu\n",deger, pos);
found = 1;
}
curr = curr->next;
}
// Eger Deger Bulunamadiysa
if (found == 0) printf("%d Listede Bulunamadi\n",deger);
}

// Olusturdugumuz Yapida Sadece Sonraki Node'u
// Tuttugumuz Icin, Geri Donus Yapamayiz :)
// Bunun Icin Recursive Fonksiyon Kullanip
// Ilk Bastan En Sona Kadar Gidip,
// Geriye Donuk Bir Bicimde Degerleri Bastirmamiz Lazim
void listeyiTerstenBas(Node * baslangic)
{
if(baslangic->next != NULL)
{
listeyiTerstenBas(baslangic->next);
printf("%d ",baslangic->val);
}
}

int main()
{
// Hafızada Yapı İçin Yer Ac
// Bu Yerin Adresini curr'e eşitle
curr = (Node *)malloc(sizeof(Node));
// curr'un Gosterdigi Yeri NULL'a esitle
curr->next = NULL;
// head'i curr'e esitle
head = curr;
// Listenin Basina Node Eklemek
// 1
// 2 1
// 3 1 2 Seklinde Olan Birsey
listeninBasinaNodeEkle(1);
listeninBasinaNodeEkle(2);
listeninBasinaNodeEkle(3);
// Listenin Sonuna Node Eklemek
// Su Anki Liste 3 1 2
// 10 Eklendikten Sonraki Hali : 3 1 2 10
// 20 Eklendikten Sonraki Hali : 3 1 2 10 20
listeninSonunaNodeEkle(10);
listeninSonunaNodeEkle(20);
// Listeyi Ekrana Bas
listeyiBas();
// Listede Deger Ara : 3
ara(3);
// Listede Deger Ara : 121
ara(35);
// Listeyi Tersten Bas
listeyiTerstenBas(head);
// 20 10 2 1 3
return 0;
}

Kodtaki bosluklar falan yok oldu, ama hala olmasi gerektigi gibi, umarim faydali olur ^^
2010'den beri1 mesaj
#11
Bende yıldırım arkadaş gibi şimdi üye oldum, bi nevi gülmek için :) Belki aeki de öyle yaptı :)
cnak arkadaş sen olumsuz şeylerden örnek alma, işe yaramaz falan bunları geç. Mantığını kap kullanırsın kullanmazsın sonra sana kalmış, elinde olsun bir bilgi. Bir arkadaş kod vermiş yararlı duruyor, tek yönlü listeyi çözdüğünde çift yönlüsüde basit gelicektir. Tabi bunları öğrenmeden önce struct ve pointer larıda bilmen gerekmekte. Bunlar içinde gereksiz diyeceklerdir ama sen aldırma :) Pointer ı kullanmıyorum şuan ve para kazanabiliyorum, ama bilmeden de işleri ilerletemiyorsun;)
cnak Konuyu açan
2010'den beri14 mesaj
#12
t(>_<t) çok teşekkür ederim kodunu incelicem faydalı olacaktır umarım.

---------- Post added at 15:45 ---------- Previous post was at 15:43 ----------

yıldırım c dilinde çalışıyorum örnek kodlar gönderirsen sevinirim.ayrıca desteğin için sağol.programlama açısından en kilit konulardan birisi bence.nomak tavsiyelerin için sağol
2009'den beri149 mesaj
#13
Linked Listi kullanmasan da ne olduğunu ve mantığını bilmek eminim sana fayda sağlayacaktır. Farklı bakış açıları sunacaktır sana....

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.