2012-12-18 4 views
7

Sono un principiante in programmazione, per favore andate piano con me e sto trovando difficile ottenere la risposta alla mia domanda. Non riesco a capire i codici complessi. Qualcuno può spiegarmi con un semplice codice di come è generic list manipulation function written which accepts elements of any kind? Grazie in anticipo.Come viene scritta la funzione di manipolazione delle liste generiche?

+1

C non è un ottimo linguaggio di programmazione generico purtroppo – Pubby

+0

Questo [LIBRO] (http://www.cs.rit.edu/ ~ ats/books/ooc.pdf) può aiutarti molto, anche un [codice] (http://www.linuxcandy.com/2011/11/week-4-introduction-to-generic.html) –

+1

@GrijeshChauhan Grazie molto – Korhan

risposta

1

Sembra che tu abbia bisogno di un elenco eterogeneo. Alcuni puntatori seguenti:

Rende l'elemento di dati del nodo di elenco come una struttura generica, che contiene un indicatore per tipo di dati e dati.

/** This should be your data node **/ 
    struct nodedata 
    { 
     int datatype; 
     void *data; 
    };  

    /** This should be your list node **/ 
    struct listnode 
    { 
     struct nodedata *data; 
     struct listnode *next; 
    }; 

Utilizzando la struttura sopra riportata, è possibile memorizzare diversi tipi di dati. Utilizzare i puntatori funzione per le funzioni di confronto o richiamare funzioni diverse a seconda del tipo di dati.

+1

Grazie. +1 per il tuo tempo. – Korhan

1

Questo avviene normalmente tramite puntatori void:

typedef struct node { 
    struct node *next; 
    void *data; 
} node; 

node *insert(node *list, void *data) { 
} 

node *delete(node *list, node *to_delete) { 
} 

tali funzioni di manipolazione non dipendono dal tipo effettivo di dati in modo che possano essere implementate generico. Per esempio si può avere un tipo di dati struct per il campo dati di cui sopra:

typedef struct data { 
    int type; 
    void *data; 
} data; 

/* .... */ 
data d; 
d.type = INT; 
d.data = malloc(sizeof(int)); 
node n = {NULL, (void*)&data); 
+0

Grazie. +1 per il tuo tempo. – Korhan