From: Leandro Lucarella Date: Mon, 1 Sep 2003 01:38:09 +0000 (+0000) Subject: Se corrigen bugs y se mejora la documentación. X-Git-Tag: svn_import~26 X-Git-Url: https://git.llucax.com/z.facultad/75.42/calculadora.git/commitdiff_plain/9bd9e775760d72533fcf53dde53f5f6c8f634895 Se corrigen bugs y se mejora la documentación. --- diff --git a/dllist.c b/dllist.c index 629f7f5..773d5e1 100644 --- a/dllist.c +++ b/dllist.c @@ -95,7 +95,7 @@ bool DLList_unshift(DLList* list, void* data) { /* Apunto el nodo actual al nuevo nodo. */ list->current = node; /* Si la lista está vacía hay que hacer apuntar todo al nuevo nodo. */ - if (DLList_empty(list)) { + if (list->first == NULL) { list->first = node; list->last = node; /* Si no está vacía. */ @@ -120,7 +120,7 @@ bool DLList_push(DLList* list, void* data) { /* Apunto el nodo actual al nuevo nodo. */ list->current = node; /* Si la lista está vacía hay que hacer apuntar todo al nuevo nodo. */ - if (DLList_empty(list)) { + if (list->first == NULL) { list->first = node; list->last = node; /* Si no está vacía. */ @@ -141,14 +141,14 @@ void* DLList_shift(DLList* list) { void* data = node->data; /* Pongo como primer nodo al siguiente. */ list->first = node->next; - /* Pongo el nodo anterior al primero como NULL. */ - list->first->prev = NULL; - /* Lo pongo como nodo actual. */ + /* Pongo al primero como nodo actual. */ list->current = list->first; - /* Si era el único actualizo los otros punteros. */ + /* Si era el único pongo el último en NULL. */ if (!list->first) { - list->last = NULL; - list->current = NULL; + list->last = NULL; + /* Si no, pongo el anterior en NULL. */ + } else { + list->first->prev = NULL; } /* Libero memoria del nodo. */ free(node); @@ -162,14 +162,14 @@ void* DLList_pop(DLList* list) { void* data = node->data; /* Pongo como último nodo al anterior. */ list->last = node->prev; - /* Pongo el nodo siguiente al último como NULL. */ - list->last->next = NULL; - /* Lo pongo como nodo actual. */ + /* Pongo al último como nodo actual. */ list->current = list->last; - /* Si era el único actualizo los otros punteros. */ + /* Si era el único pongo el primero en NULL. */ if (!list->last) { - list->first = NULL; - list->current = NULL; + list->first = NULL; + /* Si no, pongo el siguiente en NULL. */ + } else { + list->last->next = NULL; } /* Libero memoria del nodo. */ free(node); diff --git a/dllist.h b/dllist.h index 432e742..4a44446 100644 --- a/dllist.h +++ b/dllist.h @@ -191,13 +191,23 @@ bool DLList_push(DLList* list, void* data); /** * Saca el primer elemento de la DLList. * Elimina el primer elemento de la DLList devolviendo su contenido. + * Ejemplo: + * \code + * DLList* l; + * char* data; + * ... + * while (!DLList_empty(l)) { + * data = DLList_shift(l); + * printf("El elemento actual es '%s'.\\n", data); + * } + * \endcode * * \param list DLList de la cual sacar el elemento. * * \return Primer elemento de la DLList. - * \see DLList_push(), DLList_shift(), DLList_unshift() + * \see DLList_empty(), DLList_pop() * \pre La DLList debe estar \ref DLList_init "inicializada" y no - * \ref DLList_empty "vacía". + * \ref DLList_empty "vacía. * \post El puntero interno de la DLList apunta primer elemento. */ void* DLList_shift(DLList* list); @@ -205,13 +215,23 @@ void* DLList_shift(DLList* list); /** * Saca el último elemento de la DLList. * Elimina el último elemento de la DLList devolviendo su contenido. + * Ejemplo: + * \code + * DLList* l; + * char* data; + * ... + * while (!DLList_empty(l)) { + * data = DLList_pop(l); + * printf("El elemento actual es '%s'.\\n", data); + * } + * \endcode * * \param list DLList de la cual sacar el elemento. * - * \return último elemento de la DLList. - * \see DLList_push(), DLList_shift(), DLList_unshift() + * \return Último elemento de la DLList. + * \see DLList_empty(), DLList_shift() * \pre La DLList debe estar \ref DLList_init "inicializada" y no - * \ref DLList_empty "vacía". + * \ref DLList_empty "vacía. * \post El puntero interno de la DLList apunta último elemento. */ void* DLList_pop(DLList* list);