void abb_visitar(nodo_t* nodo,bool visitar(const char*, void*,void*), void *extra){ if(!nodo){ return; } abb_visitar(nodo->nodo_izquierdo,visitar,extra); visitar(nodo->clave,nodo->dato,extra); abb_visitar(nodo->nodo_derecho,visitar,extra); }
// Itera la lista aplicandole la funcion visitar a cada dato almacenado, pasandole el parametro extra para que esta lo utilice // Pre: la lista fue creada void lista_iterar(lista_t *lista, bool (*visitar)(void *dato, void *extra), void *extra) { if(!lista || !visitar || !extra) return; lista_iter_t *iter = lista_iter_crear(lista); if(!iter) return; while( !lista_iter_al_final(iter) && visitar(lista_iter_ver_actual(iter), extra) ) lista_iter_avanzar(iter); lista_iter_destruir(iter); }
void abb_in_order_recursivo(abb_nodo_t* nodo, bool visitar(const char *, void *, void *), void *extra) { if(!nodo) return; abb_in_order_recursivo(nodo->izq, visitar, extra); if(!visitar(nodo->clave, nodo->dato, extra)) return; abb_in_order_recursivo(nodo->der, visitar, extra); }
void in_orden(abb_nodo_t* arbol,bool visitar(const char *clave, void *dato, void *extra), void* extra ){ if (!arbol) return; in_orden(arbol->izquierda, visitar, extra); if(!visitar(arbol->clave, arbol->dato, extra)) return; in_orden(arbol->derecha, visitar, extra); }
void lista_iterar(lista_t *lista, bool (*visitar)(void *dato, void *extra), void *extra) { lista_iter_t* iter = lista_iter_crear(lista); void* dato = lista_iter_ver_actual(iter); while ((lista_iter_avanzar(iter)) && (visitar(dato, extra))) dato = lista_iter_ver_actual(iter); lista_iter_destruir(iter); }
void lista_iterar(lista_t *lista, bool (*visitar)(void *dato, void *extra), void *extra){ nodo_t* nodo = lista->primero; while (nodo && visitar(nodo->dato, extra)) nodo = nodo->siguiente; }