Generikus adatstruktúrák C

szavazat
2

Keresem teremthetünk olyan generikus BST. Semmi kedve nem COTS, de próbálom eldönteni, hogy a legjobb módja annak, hogy nyomon követheti a típus a void *. Itt a felület a csomópontok:

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

Azonban, amikor írok hozzáadni / eltávolítani, azt kell tennie összehasonlításokat, ezért azt meg kell nyomon követni, hogy milyen típusú adatok az „adat” mutat, igaz?

Alapötlet az, hogy van egy enum NODE_TYPE egy funkciót compareTreeNodes, amely befogadja a két TreeNodes és enum a 3. arg. Ez lehetővé tenné, hogy a funkciója, hogy meghatározza, hogy mit kell a leadott void * a.

Minden más / jobb gondolatok?

A kérdést 14/10/2010 14:35
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
4

Azonban, amikor írok hozzáadni / eltávolítani, azt kell tennie összehasonlításokat, ezért azt meg kell nyomon követni, hogy milyen típusú adatok az „adat” mutat, igaz?

Nézd meg, hogyan qsort()oldja meg ezt a problémát. Ez is kell dolgoznia tetszőleges adattípusok. Alapvetően, ha átruházhatja összehasonlítva felhasználók keresztül függvénymutatóval.

Válaszolt 14/10/2010 14:38
a forrás felhasználó

szavazat
3

Gondolom egy BST lesz csak egy típusú adatok is. Ebben az esetben azt, hogy egy kapszulázó struct, hogy tartalmaz egy mutatót a gyökér csomópont és egy mutató egy összehasonlító függvényt. A felhasználó a BST volna, hogy egy megfelelő funkciót inicializálás.

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

Btw, az első sort valószínűleg typedef struct TreeNode {. Van egy typdef'd névtelen struct, de utalnak a nem létező jelölt struct belül. Ez a két változat fog működni:

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

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

Nem lehet, hogy önreferenciálisak anonim structs.

Válaszolt 14/10/2010 14:42
a forrás felhasználó

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