我正在实现队列数据结构,并使用void *指针使其通用。但是我很棘手,如果像在C ++中有模板那样在C中甚至有可能,我应该如何传递数据类型信息以获取特定数据类型的队列。
typedef struct queue{void * data;
struct queue * link;
}Queue;
Queue * getQueue(pass the type){
Queue * head = (Queue *)malloc(sizeof(Queue));
//cast by type the data of queue and return created queue node.
return head;
}
使用malloc()
C函数创建的队列。以上代码创建了队列的头。然后其他功能将根据插入请求创建后续节点。
这是错误的,但是我应该如何传递数据类型信息以将其正确投射,还是必须使用_Generic宏,或者是否存在通过C中其他某种机制来获取类型信息的功能。
您的案例无需任何技巧。无需理会任何种类的通用性。您正在实现一个存储空指针的队列。空队列将由NULL表示。函数addElement
将向队列添加一个空指针。就这些。该实现可能如下所示:
typedef struct queue {
void * data;
struct queue * link;
} Queue;
Queue * getQueue() {return(NULL);}
void addElement(Queue **qq, void *data) {
// find last ptr
for(; *qq != NULL; qq = &((*qq)->link) ) ;
*qq = malloc(sizeof(Queue));
(*qq)->data = data;
(*qq)->link = NULL;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句