使用void *在双链表上查找函数

时间:2013-11-26 08:54:12

标签: c pointers function-pointers void-pointers doubly-linked-list

关于Void * on double linked lists的上一个问题,我现在想知道如何实现处理这种链表的查找函数。 我向前迈出了一步,我有点困惑..基本想法如下

void find(list_el *el, linked_list *l_ptr )
{
    list_el *p = l_ptr->head;
    while(p != NULL)
    {
       if ((l_ptr->data_compare_func(el->data,p->data)) == 0) /* 0 means exact match*/
       {
           printf("Found\n");
       }
           p = p->next;
    } 
}

因为现在写的是错的,但我不能做得比这更好,因为我不清楚它是如何工作的。我想让它变得动态,我没有关于如何处理el参数的更好方法的想法......我应该将其声明为list_el还是应该将其声明为void *?一个问题可能是,如果我每次必须调用find我将其声明为list_el我必须创建一个新的list_el填充它并将其传递给find方法。我认为这不是一个好方法..对于“无效*解决方案”我不知道它是否会改变某些东西或许会更糟......因为你可以从我的ramblings中推断出非常困惑任何帮助都会有用..

由于

1 个答案:

答案 0 :(得分:1)

当然find()函数不应要求调用者将数据包装在list元素中。

听起来好像你对此更加困惑,因为列表中包含void *作为数据,不知道为什么。

如果你有一个int的列表,那么我猜你会期望有一个bool find(const list_el *head, int value);函数来查找某个数字。它与void *没有什么不同,但当然实际的比较可能会有点棘手,因为它没有明确定义平等意味着什么。

当然,这就是为什么你的列表似乎使用应用程序提供的回调函数来进行比较。