diff --git a/lib_lista.c b/lib_lista.c index a8fde076dbebb6fccb7e5585e737230cb44eeba5..df2079c885b25ebe8f6e0068d2ac5cab6da8767e 100644 --- a/lib_lista.c +++ b/lib_lista.c @@ -11,18 +11,22 @@ int inicializa_lista(t_lista *l) if (sentinel == NULL) return 0; + sentinel->prox = NULL; sentinel->prev = l->ini; + l->ini = sentinel; sentinel = (t_nodo*) malloc (sizeof (t_nodo)); if (sentinel == NULL) return 0; - l->ini->prox = sentinel; + sentinel->prox = NULL; sentinel->prev = l->ini; + + l->ini->prox = sentinel; l->fim = sentinel; - l->atual = NULL; + l->atual = NULL; l->tamanho = 0; return 1; @@ -38,11 +42,8 @@ int lista_vazia(t_lista *l) void destroi_lista(t_lista *l) { - if (l->ini == NULL && l->fim == NULL && l->tamanho == 0) - { - printf ("This list is already destroyed.\n"); + if (l->ini == NULL && l->atual == NULL && l->fim == NULL && l->tamanho == 0) return; - } t_nodo *p; diff --git a/lib_lista_complementar.c b/lib_lista_complementar.c index 7e7c832f559dbad8db1a6ac9c6fb23dce3eedf55..7480e823ee9bfdf2cdd8a3a48bae0b0fa3b21ec8 100644 --- a/lib_lista_complementar.c +++ b/lib_lista_complementar.c @@ -54,19 +54,11 @@ int concatena_listas(t_lista *l, t_lista *c) { int item; - if (!inicializa_atual_inicio(c)) - return 0; - - while (consulta_item_atual(&item, c)) - { + while (remove_inicio_lista(&item, c)) if (!insere_fim_lista (item, l)) - return 0; - incrementa_atual(c); - } + return 0; - /* BUG destroi_lista(c); - */ return 1; } @@ -74,7 +66,24 @@ int concatena_listas(t_lista *l, t_lista *c) Ordena a lista l em ordem crescente. Retorna 1 se a operação foi bem sucedida e zero caso contrário. */ -int ordena_lista(t_lista *l){return 1;} +int ordena_lista(t_lista *l) +{ + t_lista aux; + if (!inicializa_lista(&aux)) + return 0; + + int item; + while (remove_fim_lista(&item, l)) + if (!insere_ordenado_lista(item, &aux)) + return 0; + + if (!copia_lista(&aux, l)) + return 0; + + destroi_lista(&aux); + + return 1; +} /* Funcao que cria uma nova lista i pela intercalacao dos elementos diff --git a/main.c b/main.c index 738dcb68fa77f07b18675b2f660e6488e3594146..2a77806723228894d95db1154b2dc8d8e1a80d4d 100644 --- a/main.c +++ b/main.c @@ -8,24 +8,40 @@ int main() inicializa_lista(&l); inicializa_lista(&u); + printf("insere inicio e fim:\n"); insere_inicio_lista(10,&l); insere_inicio_lista(20,&l); insere_inicio_lista(5,&l); insere_fim_lista(8,&l); insere_fim_lista(12,&l); insere_fim_lista(32,&l); + printf ("lista l: "); imprime_lista(&l); - printf("\n"); + printf("\n\n"); + printf("copia:\n"); copia_lista(&l, &u); + printf ("lista u: "); imprime_lista(&u); - printf("\n"); + printf("\n\n"); + printf("concatena:\n"); concatena_listas(&l, &u); + printf ("lista l: "); imprime_lista(&l); printf("\n"); + printf ("lista u: "); imprime_lista(&u); + printf("\n\n"); + + printf("ordena:\n"); + ordena_lista(&l); + printf ("lista l: "); + imprime_lista(&l); printf("\n"); + destroi_lista(&l); + destroi_lista(&u); + return 0; }