Skip to content

Commit

Permalink
Adicionados alguns comentários para o funcionamento da biblioteca
Browse files Browse the repository at this point in the history
  • Loading branch information
muriloloffi committed May 10, 2018
1 parent 67bce6a commit c54be61
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 23 deletions.
41 changes: 22 additions & 19 deletions Lista.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ void inicializa_lista(Lista *p, int t){
}

int lista_vazia(Lista l){
return l.cabeca == NULL;
return l.cabeca == NULL; //se o cabeca não aponta pra nenhum elemento, a lista está vazia
}

/*int insereNoInicio(Lista *p, void *info){
Expand Down Expand Up @@ -97,23 +97,23 @@ int insereNoFim(Lista *l, void *info){
}

int removeDoFim(Lista *l, void *info){
if(lista_vazia(*l))
if(lista_vazia(*l)) //verifica se a lista já está vazia
return ERRO_LISTA_VAZIA;
if(l->cabeca->proximo == NULL) //Somente 1 elemento.
return removeDoInicio(l,info); //Novamente reutilizando código.
Elemento *p = l->cabeca;
while(p->proximo->proximo != NULL){
if(l->cabeca->proximo == NULL) //Para esta codição há somente 1 elemento na lista.
return removeDoInicio(l,info); //Novamente reutilizando código.
Elemento *p = l->cabeca;
while(p->proximo->proximo != NULL){ //'p' percorre a lista até seu penúltimo elemento
p = p->proximo;
/* Como o último elemento não tem ponteiro apontando para o elemento,
por isso a lista é percorrida apenas até o penúltimo*/
/* Como o último elemento não tem ponteiro apontando para o elemento antecessor,
por isso a lista é percorrida apenas até o penúltimo!*/
}
Elemento *x = p->proximo; //Este será o elemento desalocado
memcpy(info, x->info, l->tamInfo);
free(x->info);
free(x);
p->proximo = NULL;
/*Penúltimo elemento passa a apontar para NULL sem que seja necessário
percorrer toda a lista novamente*/
Elemento *x = p->proximo; //Novo elemento x recebe o último. Este será o elemento desalocado.
memcpy(info, x->info, l->tamInfo); //copia informação para o ponteiro info, que ficará disponível
free(x->info); //desaloca a informação do último elemento.
free(x); //desaloca o último elemento.
p->proximo = NULL;
/*Penúltimo elemento passa a apontar para NULL sem que seja necessário
percorrer toda a lista novamente*/
return 1; //sucesso
}

Expand All @@ -126,14 +126,17 @@ void desaloca_lista(Lista *l){
p=proximo;
}
l->cabeca = NULL;
} //MÉTODO N.1
}

//MÉTODO N.1

/* MÉTODO N.2:
Podemos utilizar abstração e resolver o mesmo problema com um
código mais elegante
código mais elegante */

void desaloca_lista_v2(Lista *l){
void *aux = malloc(l->tamInfo);
/*
void desaloca_lista_v2(Lista *l){
void *aux = malloc(l->tamInfo); //cria-se um ponteiro que recebe
while(!lista_vazia(*l)){
removeDoInicio(l,aux);
}
Expand Down
10 changes: 6 additions & 4 deletions Lista.h
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
#define ERRO_LISTA_VAZIA -1
#define ERRO_LISTA_VAZIA -1 //####POR QUE MESMO O "DEFINE ERRO_LISTA_VAZIA" é utilizado?
#include <stdio.h>

typedef struct ele{ //aqui a gente dá nome "ele" à estrutura para que ela possa se auto referenciar na declaração do ponteiro proximo
typedef struct ele{
/*aqui a gente dá nome "ele" à estrutura para que ela possa se auto
referenciar na declaração do ponteiro proximo*/
void *info;
struct ele *proximo;
}Elemento;

typedef struct{
typedef struct{ //
Elemento *cabeca;
int tamInfo;
}Lista;
Expand All @@ -21,4 +23,4 @@ int removeDoInicio(Lista *l, void *info);
int insereNoFim(Lista *l, void *info);
int removeDoFim(Lista *l, void *info);
void desaloca_lista(Lista *l);
void desaloca_lista_v2(Lista *l);
//void desaloca_lista_v2(Lista *l);

0 comments on commit c54be61

Please sign in to comment.