继上一个关于 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 方法。我认为这不是一个好方法..对于“void *解决方案”,我不知道它是否会改变某些东西,也许会更糟...正如你可以从我的漫谈中推断出的那样,非常困惑,任何帮助都会有用..
谢谢
最佳答案
当然,find()
函数不应要求调用者将数据包装在列表元素中。
听起来好像您对此变得更加困惑,因为列表将 void *
作为其数据,不知道为什么。
如果您有一个 int
列表,那么我猜您会期望有一个 bool find(const list_el *head, int value);
函数来查找一定数量。对于 void *
来说没有什么不同,但当然实际的比较可能会更棘手一些,因为平等的含义不太明确。
当然,这就是为什么您的列表似乎使用应用程序提供的回调函数来进行比较。
关于c - 在双链表上查找带有 void * 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212294/