2012-12-18 4 views
7

私はプログラミングの初心者です。私には簡単に行ってください。私は私の質問の答えを得るのが難しいと思っています。私は複雑なコードの周りに私の頭を得ることができません。いくつかの1つは簡単なコーディングで私を説明することができますどのようにgeneric list manipulation function written which accepts elements of any kind?ありがとうございます。一般的なリスト操作関数はどのように記述されていますか?

+1

Cジェネリックプログラミングのための非常に良い言語ではありません、残念ながら – Pubby

+0

この[BOOK](http://www.cs.rit.edu/ 〜ats/books/ooc.pdf)もお手伝いします。[code](http://www.linuxcandy.com/2011/11/week-4-introduction-to-generic.html) –

+1

@GrijeshChauhanありがとうあなたは大変 – Korhan

答えて

1

異質なリストが必要なようです。下記のいくつかのポインタ:

リストノードのデータ要素を、データ型とデータのインジケータを含む汎用構造体にします。

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

上記の構造を使用すると、さまざまな種類のデータを保存できます。 比較関数に関数ポインタを使用するか、データ型に応じて異なる関数を呼び出します。

+1

ありがとう。あなたの時間+1。 – Korhan

1

これは通常、ボイドポインタを使用して行われます:彼らは一般的に実装できるように

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

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

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

な操作関数は、データの実際の型に依存しません。たとえば、あなたは、上記のデータフィールドのデータ型の構造体を持つことができます。

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

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

ありがとうございます。あなたの時間+1。 – Korhan

関連する問題