bir iki ayrı soyut veri tiplerini birleştirerek

oy
0

Hey çalışıyorum çocuklar benim CS atama (ikinci yıl C kağıdı) üzerine başlamak için.

Bu derste bir İkili arama ağacı ADT ve aynı zamanda bir kırmızı Black Tree ADT oluşturduk. Biz Kırmızı Siyah Ağaç veya kullanıcı girişi bağlı bir İkili arama ağacı olmayı seçecektir ya bir daha genel Ağaç ADT bunları birleştirmek zorundayız.

Yeni numaralandırılmış türü tanımlayarak başladı; Ya RBT veya BST ... ayarlanabilir treetype_t benim ilk soru ben ADT seçileceği bilmiyorum çünkü yapı bildirmek nasıl? Benim bst.c dosyasında örneğin ben:

struct bstnode {
   char *key;
   bst left;
   bst right;
};

ve benim MHK dosyasında ben vardır:

struct rbtnode {
   char *key;
   colour_t colour;
   rbt left;
   rbt right;
};

Benim ilk fikir gibi bir eğer deyimi sahip olmaktı

  if (treetype_t == RBT){
           struct rbtnode {
       char *key;
       colour_t colour;
       rbt left;
       rbt right;
    };
   }
     else{

         struct bstnode {
       char *key;
       bst left;
       bst right;
    };
}

herhangi bir fikir - Ancak bu ... Başka bir yaklaşım düşünemiyorum çalışacağını sanmıyorum?

Oluştur 29/09/2011 saat 08:46
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Yapı tanımlamaları da kodda olduğu gibi çalışma zamanı sırasında değiştirilemez. Yalnızca önişlemcisinin en kullanarak derleme sırasında bunları değiştirebilir / # Eğer ifdef # direktifi, ama (kullanıcı doğrudan kaynak kodunu değiştirmek ve yeniden derleyebilirseniz sürece) o an henüz kullanıcı girişi olmadığı için bu çok erken.

Ne yapabilirsiniz kullanarak birine bu yapıları birleştiren bir birlik anahtar kelime:

struct rbtnode {
    char *key;
    colour_t colour;
    rbt left;
    rbt right;
};

struct bstnode {
    char *key;
    bst left;
    bst right;
};

union bst_or_rbt_node {
    struct bstnode bst_node;
    struct rbtnode rbt_node;
};

Sonra birliğin rbt_node üyesi veya kullanıcı girişi bağlı bst_node üyesi kullanabilirsiniz.

Eğer bst_or_rbt_node için yeterli alan (en güvenli sizeof (bst_or_rbt_node kullanarak olurdu)) tahsis emin olun.

Ayrıca, ben rbt ve BST işaretçisi türleridir umuyoruz.

Bu sendikalar kullanmak gerekli değildir, ancak mevcut düzeyde o boşluk örneğin göstericilerle birlikte daha onlarla ilgilenmeye biraz daha kolay olabilir, işaretçi düşürdü.

Cevap 29/09/2011 saat 09:06
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more