From dbe205fe197aadd3e81a031b0c1493d99593e122 Mon Sep 17 00:00:00 2001 From: Leonardo Krambeck <lk19@inf.ufpr.br> Date: Tue, 29 Oct 2019 18:59:09 -0300 Subject: [PATCH] arruma incrementa/decrementa/remove/consulta atual --- lib_lista.c | 62 +++++++++++++++++++---------------------------------- lib_lista.h | 10 ++++----- main.c | 28 +++++++++++++----------- 3 files changed, 43 insertions(+), 57 deletions(-) diff --git a/lib_lista.c b/lib_lista.c index e7c4b38..0352efc 100644 --- a/lib_lista.c +++ b/lib_lista.c @@ -201,72 +201,55 @@ int pertence_lista(int chave, t_lista *l) return 1; } -/* - Para poder retornar o ponteiro de atual, foi necessário - alterar o tipo do retorno de void para t_nodo*. -*/ -t_nodo* inicializa_atual_inicio(t_lista *l) +int inicializa_atual_inicio(t_lista *l) { if (lista_vazia(l)) - return NULL; + return 0; l->atual = l->ini->prox; - return l->atual; + return 1; } -/* - Para poder retornar o ponteiro de atual, foi necessário - alterar o tipo do retorno de void para t_nodo*. -*/ -t_nodo* inicializa_atual_fim(t_lista *l) +int inicializa_atual_fim(t_lista *l) { if (lista_vazia(l)) - return NULL; + return 0; l->atual = l->fim->prev; - return l->atual; + return 1; } -/* - Para poder retornar o ponteiro de atual, foi necessário - alterar o tipo do retorno de void para t_nodo*. -*/ -t_nodo* incrementa_atual(t_lista *l) +void incrementa_atual(t_lista *l) { if (lista_vazia(l) || l->atual == NULL) - return NULL; + return; if (l->atual->prox == l->fim) - return NULL; + return; l->atual = l->atual->prox; - - return l->atual; } -/* - Para poder retornar o ponteiro de atual, foi necessário - alterar o tipo do retorno de void para t_nodo*. -*/ -t_nodo* decrementa_atual(t_lista *l) +void decrementa_atual(t_lista *l) { if (lista_vazia(l) || l->atual == NULL) - return NULL; + return; if (l->atual->prev == l->ini) - return NULL; + return; l->atual = l->atual->prev; - - return l->atual; } -int consulta_item_atual(int *item, t_nodo *atual) +int consulta_item_atual(int *item, t_lista *atual) { - if (atual == NULL) + if (atual->atual == NULL) + return 0; + + if (atual->atual == atual->ini || atual->atual == atual->fim) return 0; - *item = atual->chave; + *item = atual->atual->chave; return 1; } @@ -275,15 +258,14 @@ int remove_item_atual(int *item, t_lista *l) if (l->atual == NULL) return 0; + if (l->atual == l->ini || l->atual == l->fim) + return 0; + t_nodo *p = l->atual; p->prev->prox = p->prox; p->prox->prev = p->prev; - if (p->prox->prox == NULL) - l->atual = p->prev; - - else - l->atual = p->prox; + l->atual = p->prox; *item = p->chave; free (p); diff --git a/lib_lista.h b/lib_lista.h index 0821c3e..0a74103 100644 --- a/lib_lista.h +++ b/lib_lista.h @@ -93,33 +93,33 @@ int pertence_lista(int chave, t_lista *l); Inicializa o ponteiro atual para o primeiro elemento da lista. Retorna 1 se a operação foi bem sucedida e zero caso contrário. */ -t_nodo* inicializa_atual_inicio(t_lista *l); +int inicializa_atual_inicio(t_lista *l); /* Inicializa o ponteiro atual para o ultimo elemento da lista. Retorna 1 se a operação foi bem sucedida e zero caso contrário. */ -t_nodo* inicializa_atual_fim(t_lista *l); +int inicializa_atual_fim(t_lista *l); /* Faz o ponteiro atual apontar para o próximo nodo da lista l e retorna este ponteiro. Se atual estiver apontando para o último, isto é, não tem próximo, retorna NULL. */ -t_nodo* incrementa_atual(t_lista *l); +void incrementa_atual(t_lista *l); /* Faz o ponteiro atual apontar para o nodo anterior da lista l e retorna este ponteiro. Se atual estiver apontando para o primeiro, isto é, não tem anterior, retorna NULL. */ -t_nodo* decrementa_atual(t_lista *l); +void decrementa_atual(t_lista *l); /* Retorna em *item o valor contido na chave apontada pelo ponteiro atual. Se atual não for válido a função retorna zero senão retorna 1. */ -int consulta_item_atual(int *item, t_nodo *atual); +int consulta_item_atual(int *item, t_lista *atual); /* Remove o elemento apontado por atual da lista l e o retorna em *item. diff --git a/main.c b/main.c index 10b84f5..d2a186d 100644 --- a/main.c +++ b/main.c @@ -21,7 +21,6 @@ int main () { t_lista l; int item; - t_nodo* atual; inicializa_lista(&l); insere_ordenado_lista(7, &l); @@ -30,18 +29,23 @@ int main () insere_ordenado_lista(3, &l); insere_ordenado_lista(2, &l); imprime (&l); - atual = inicializa_atual_inicio(&l); - atual = incrementa_atual(&l); - atual = incrementa_atual(&l); - atual = incrementa_atual(&l); - atual = incrementa_atual(&l); - remove_item_atual (&item, &l); - printf ("%d\n", item); + + inicializa_atual_inicio(&l); + + incrementa_atual(&l); + incrementa_atual(&l); + incrementa_atual(&l); + incrementa_atual(&l); + + + remove_item_atual(&item,&l); + printf("%d\n",item); + + remove_item_atual(&item,&l); + printf("%d\n",item); + imprime (&l); - atual = decrementa_atual(&l); - atual = incrementa_atual(&l); - consulta_item_atual (&item, atual); - printf ("%d\n", item); + destroi_lista (&l); return 0; } -- GitLab