[英]Generic data structure search in c
我正在尝试在c中编写一个完全通用的数据结构库。
c编程中是否有任何方法或技术允许在不知道数据类型的情况下搜索数据?
在这里,我必须根据数据类型再次定义比较函数。
list.h
typedef struct _node
{
void *data;
struct _node *next;
}NODE;
typedef struct _list
{
NODE *head;
NODE *tail;
NODE *current;
}GLIST;
int search(GLIST *list,void *data,int (*COMPARE)(void*,void*));
和
list.c
int search(GLIST *list,void *data,int(*COMPARE)(void*,void*))
{
list->current=list->head;
int cIndex=1;
while(list->current)
{
if(COMPARE(list->current->data,data))
{
printf("data found at position %i.\n",cIndex);
if(list->current->next==NULL)
{
return 1;
}
}
list->current=list->current->next;
cIndex++;
}
printf("NO DATA FOUND.\n");
return 0;
}
和
mycode.c
int compare(void *list,void *data);
typedef struct _student
{
int studentNumber;
char name[64];
}STUDENT;
int main()
{
GLIST list;
//initializing list......
STUDENT stud;
//code .....
search(&list,&stud,compare) // I want an alternative of using compare here
search(&list,&stud); // want the function be like this and also be generic !
return 0;
}
int compare(void *list,void *data)
{
// I do not wanna have to declare this function even
return !strcmp(((STUDENT*)list)->name,((STUDENT*)data)->name);
}
我想知道是否有一个通用的东西可以用c或其他任何一种技术来比较元素“结构,联合,数组”。
如果不知道两个对象的数据类型,就无法比较它们。
最初的尝试可能是使用类似memcmp
,但这至少由于以下三个原因而失败:
struct
或union
类型的对象也可能由于填充而导致错误的结果。 因此,唯一的方法(通用库使用此方法)是定义接受用户定义的比较函数作为参数的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.