я написал этот двойной связанный список с недействительными указателямидвойного связанный списка и пустотные указатели [найти метод]
typedef struct list_el
{
void *data;
struct list_el *prev;
struct list_el *next;
} list_el;
typedef struct linked_list
{
int n_el; /*number of elements*/
list_el * head; /*pointer to the head*/
list_el * tail; /*pointer to the head*/
} linked_list;
и я написал эти функции для обработки с ним.
/*for list_el allocation*/
list_el * new_el (void)
{
return (list_el *) malloc(sizeof(list_el));
}
/*list initialization*/
void init_list(linked_list **l_ptr)
{
(*l_ptr) = (linked_list *)malloc(sizeof(linked_list));
(*l_ptr)->n_el = 0;
(*l_ptr)->head = NULL;
(*l_ptr)->tail = NULL;
}
/*head insertion*/
void append(void *data , linked_list **l_ptr)
{
list_el *nv;
nv = new_el();
nv->data = data;
if((*l_ptr)->n_el == 0)
{
nv->next = nv->prev = NULL;
(*l_ptr)->head = (*l_ptr)->tail = nv;
(*l_ptr)->n_el += 1;
}
else
{
nv->next = (*l_ptr)->head;
(*l_ptr)->head->prev = nv;
(*l_ptr)->head = nv;
(*l_ptr)->n_el += 1;
}
}
Я пытаюсь написать функцию поиска таким образом.
void * find(void * el , linked_list ** l_ptr);
где ** l_ptr - указатель на список для поиска, а el - элемент для поиска. Поскольку я пытаюсь сравнить два void * (void * el и void * data), я не знаю, как реализовать сравнение этого типа.
Спасибо.
Вы пытаетесь сравнить указатель или (неизвестный) тип, на который он указывает? Если последний, ответ StoryTeller - это путь вперед. Если вы просто хотите сравнить указатель, используйте '==' так же, как и любой другой тип. – Useless