繁体   English   中英

C中的通用数据结构搜索

[英]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 ,但这至少由于以下三个原因而失败:

  1. 不知道类型,就不知道对象的大小。
  2. 即使您以某种方式可以得出一定的大小,比较structunion类型的对象也可能由于填充而导致错误的结果。
  3. 基于内存布局的比较最多只能实现“浅”比较,就各个数据类型而言,这可能不表示“相等”。

因此,唯一的方法(通用库使用此方法)是定义接受用户定义的比较函数作为参数的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM