2016-03-27 20 views
0

Üniversite sınıfında, zincirleme bir liste oluşturmak istiyorsak, bir yapı oluşturduğumuzu ve listenin her bölümünü bir işaretçi olarak ele alacağımızı öğrettiler. Böyle şey:Niçin zincirleme listesindeki düzenli yapı türü varlardan daha çok struct struct kullanmalısınız?

typedef struct node_elem { 
    int key; 
    int value; 
    struct node_elem* next; 
} node; 
typedef node* node_ptr; 

int main() { 
    node_ptr b; 
    b = (node_ptr) malloc(sizeof(node)); 
    b->key = 2; b->value=20; 

Bunun bir yapı içine veri yazmak için tek güvenilir yolu düşündüm ama şu ben sadece denedim ve o kadar iyi çalıştı:

node a, c; // this instead of pointer, direct declaration 
node_ptr b; 
b = (node_ptr) malloc(sizeof(node)); 
a.key = 1; a.value = 10; 
a.next = b; 
b->key = 2; b->value = 20; 
b->next = &c; 
c.key = 3; c.value = 30; 

yok sorum şu: Neden İşaretçi-varyantı bile kullanıyor musunuz? Diğer yol daha kolay görünüyor çünkü hafızayı ayrı olarak ayırmam gerekmiyor. Her iki şekilde de listeden geçebilirim.

+0

"İşaretçi sürümü" ile, bir yerel değişken (yani "a" veya "c" değişkenleri) oluşturmanın tersine, belleği "malloc" (yani "b" değişkeni) ile ayırmak mı istiyorsunuz? – Cornstalks

+2

1000 düğümlü bir liste oluşturmayı deneyin ve kendiniz görünün :) 1000 değişken beyanı yazmak ister misiniz? –

+0

@Cornstalks yes – phip1611

cevap

0

Liste düğümünü her iki şekilde de ayırabilirsiniz: statik olarak dinamik ve çalışır. Ancak, bağlantılı liste kullanımı, listenin keyfi bir boyutta büyüyerek, listeyi rasgele sayıdaki düğümlerle doldurmasıdır.

Statik düğümleriniz varsa neden bağlantılı bir liste oluşturmak istiyorsunuz?

Eğer düğüm sayısını bilmiyorsanız: bu düğümleri statik olarak nasıl bildiriyorsunuz?