C genel veriyapılarıdır

oy
2

Ben genel bir BST oluşturarak araştırıyorum. Hiçbir şey hiçbir COTS fantezi, ama ben * boşluğa tipine takip etmenin en iyi yolu karar çalışıyorum. İşte düğümleri için arayüz:

typedef struct
{
   void *data;
   struct TreeNode *left;
   struct TreeNode *right;  
} TreeNode;

Ben ekle / kaldır yazma Ancak, ben karşılaştırmalar yapmak gerekir, dolayısıyla ben veri doğru, bir şekilde işaret ettiğinden veri türüne takip etmek gerekir?

Temel fikir bir enum NODE_TYPE ve iki TreeNodes alan bir fonksiyon compareTreeNodes ve 3 arg enum sahip olmaktır. Bu işlev için boşluk * döküm için ne olduğunu belirlemek için izin verecek.

Başka / iyi düşünceler?

Oluştur 14/10/2010 saat 14:35
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
4

Ben ekle / kaldır yazma Ancak, ben karşılaştırmalar yapmak gerekir, dolayısıyla ben "veri" doğru, bir şekilde işaret ettiğinden veri türüne takip etmek gerekir?

Bak nasıl qsort()bu sorunu çözer. Adeta keyfi veri türleri üzerinde çalışması gerekiyor. Temel olarak, bir işlev işaretçisi üzerinden kullanıcılara karşılaştırma, temsilci.

Cevap 14/10/2010 saat 14:38
kaynak kullanıcı

oy
3

Tek bir BST İçinde veri sadece bir tip olacak varsayalım. Bu durumda bir içine alan olur structkök düğümü ve bir karşılaştırma fonksiyonu için bir işaretçi bir işaretçi içerir. Senin BST kullanıcı başlatmada uygun bir işlev sağlamak gerekir.

typedef struct {
    TreeNode *root;
    int (*compar)(const void *, const void *);
} Tree;

Btw, ilk satır muhtemelen olmalıdır typedef struct TreeNode {. Bir typdef'd anonim var struct, ama içinde var olmayan bir etiketli bir yapı bakın. Bu iki sürümü çalışacak:

typedef struct TreeNode {
    void *data;
    struct TreeNode *left, *right;
} TreeNode;

typedef struct TreeNode TreeNode;
struct TreeNode {
    void *data;
    TreeNode *left, *right;
};

Sen özüne anonim yapamaz structs.

Cevap 14/10/2010 saat 14:42
kaynak kullanıcı

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