Bağlı liste
- C kursu
- Orta seviye
- Ders 70/116
- 5 dk
struct ile bağlı liste oluşturmayı öğrenirsin.
Bağlı liste
Bir bağlı liste, her düğümün bir sonraki düğümü işaret ettiği bir veri yapısıdır. Dizilerin aksine, boyutu önceden belirlenmez; düğüm ekledikçe büyür.
Her düğüm iki parçadan oluşur: data (taşınan değer) ve next (sonraki düğümün adresi). C'de bunu bir struct ile tanımlarız: typedef struct Node { int data; struct Node *next; } Node;. typedef sayesinde struct Node yerine kısa Node yazabilirsin. Listenin sonunda next alanı NULL olur; bu, listenin bittiğini gösterir.
Düğüm oluşturma
Yeni bir düğüm malloc ile yığın bellekten ayrılır. Node *n = malloc(sizeof(Node)); çağrısı, bir Node büyüklüğünde bellek ayırır ve adresini n'ye verir.
Ayrılan düğümün alanları n->data = 42; ve n->next = NULL; biçiminde doldurulur. -> işleci, işaretçinin gösterdiği struct'ın alanına erişir. Listenin tek başına bir düğüm olduğu durumda next yine NULL olur. İş bitince free(n); ile bellek iade edilir; aksi halde sızıntı oluşur. malloc ve free için <stdlib.h> başlık dosyasını eklemelisin.
Uygulama Tek düğümlü liste
typedef struct Node { int data; struct Node *next; } Node; tanımını yaz. main'de Node *n = malloc(sizeof(Node)); ile bir düğüm ayır. n->data = 42; ve n->next = NULL; ata. printf("%d\n", n->data); ile yazdır. Son olarak free(n); çağır.
Başlangıç kodu
#include <stdio.h>
#include <stdlib.h>
// Node struct'ını tanımla: int data, struct Node *next
// main: bir node oluştur, data = 42, yazdır, free ile iade et
int main(void) {
// buraya yaz
return 0;
}Örnek çözüm
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
int main(void) {
Node *n = malloc(sizeof(Node));
n->data = 42;
n->next = NULL;
printf("%d\n", n->data);
free(n);
return 0;
}Beklenen çıktı
42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir Node struct'ında sonraki düğümü hangi alan tutar?
- data
- prev
- next Doğru cevap
- size
Açıklama: next alanı bir sonraki Node'un adresini taşır.
2 Node için bellek ayır
Node *n = malloc(sizeof(____));
Node *n = malloc(sizeof(Node));
Açıklama: sizeof(Node) bir Node'un bayt büyüklüğünü verir.
3 Düğüm parçaları
| Kavram | Anlamı |
|---|---|
data |
taşınan değer |
next |
sonraki düğüm adresi |
malloc |
bellek ayır |
free |
bellek iade et |