7

私はプログラミングの初心者です。お手柔らかにお願いします。私の質問に対する答えを得るのが難しいと感じています。複雑なコードが頭に浮かびません。generic list manipulation function written which accepts elements of any kind?事前に感謝します。

4

2 に答える 2

2

これは通常、void ポインターを使用して行われます。

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);
于 2012-12-18T05:59:37.450 に答える
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;
    };

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

于 2012-12-18T05:58:53.220 に答える