2012-12-18 18 views
7

Jestem początkującym programistą, proszę, idź łatwo i trudno mi znaleźć odpowiedź na moje pytanie. Nie potrafię opanować skomplikowanych kodów. Czy ktoś może mi wyjaśnić za pomocą prostego kodowania, jak jest generic list manipulation function written which accepts elements of any kind? Z góry dziękuję.W jaki sposób napisana jest ogólna funkcja manipulacji listą?

+1

C nie jest bardzo dobrym językiem do programowania generycznego niestety – Pubby

+0

To [Książka] (http://www.cs.rit.edu/ ~ ats/books/ooc.pdf) może ci bardzo pomóc, także [kod] (http://www.linuxcandy.com/2011/11/week-4-introduction-to-generic.html) –

+1

@GrijeshChauhan bardzo dziękuję – Korhan

Odpowiedz

1

Wygląda na to, że potrzebujesz heterogenicznej listy. Niektóre wskaźniki poniżej:

Utwórz element danych węzła listy jako ogólną strukturę, która zawiera wskaźnik dla typu danych i danych.

/** 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; 
    }; 

Korzystając z powyższej struktury, można przechowywać różne typy danych. Użyj funkcji wskaźników do funkcji porównania lub wywołaj różne funkcje w zależności od typu danych.

+1

Dziękuję. +1 za Twój czas. – Korhan

1

ta jest zwykle wykonywane przy użyciu void wskaźniki:

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

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

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

takie funkcje manipulacji nie zależy od faktycznego rodzaju danych, dzięki czemu mogą one zostać wdrożone rodzajowo. Na przykład można mieć struct typ danych pola danych powyżej:

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

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

Dziękuję. +1 za Twój czas. – Korhan