我正在编写一个通用列表 adt,这就是我目前在标题中的内容。据我所知,这通常是如何完成的。
typedef struct _node {
void *data;
struct _node *next;
} Node;
typedef struct {
Node *dummy;
int (*comparePtr) (void *d1, void *d2);
void (*destroyPtr) (void *data);
} List;
List *ListCreate (int (*comparePtr) (void *d1, void *d2), void (*destroyPtr) (void *data));
void ListDestroy (List *node);
void ListAddToTail (List *list, void *data);
int ListContains (List *list, void *data);
void *ListGetFromIndex (List *list, int index);
它在实施方面工作正常。我注意到的是,为了使用这个 adt 来存储整数,我必须以这种方式进行调用
int a = 5;
ListAddToTail (list, &a);
而在一个完美的世界里,我可以做到这一点
ListAddToTail (list, 55);
所以问题是是否可以修改它以允许我传入任何类型的数据,指针或非指针,非指针主要是原始类型,如整数和字符?