From f1ef5480d11f8cbe7773cc7f070b2ca4e7e24293 Mon Sep 17 00:00:00 2001
From: Leonardo Krambeck <lk19@inf.ufpr.br>
Date: Thu, 24 Oct 2019 17:02:52 -0300
Subject: [PATCH] implementa tamanho e insere fim

---
 lib_lista.c | 44 ++++++++++++++++++++++++++++----------------
 main.c      |  8 +++++++-
 2 files changed, 35 insertions(+), 17 deletions(-)

diff --git a/lib_lista.c b/lib_lista.c
index 05e3ee2..8b93226 100644
--- a/lib_lista.c
+++ b/lib_lista.c
@@ -60,10 +60,6 @@ void destroi_lista(t_lista *l)
 	l->tamanho = 0;
 }
 
-/*
-  Insere o elemento item no início da lista.
-  Retorna 1 se a operação foi bem sucedida e zero caso contrário.
-*/
 int insere_inicio_lista(int item, t_lista *l)
 {
 	t_nodo *new;
@@ -73,9 +69,8 @@ int insere_inicio_lista(int item, t_lista *l)
 		return 0;
 
 	new->chave = item;
-
-	new->prox = l->ini->prox;
 	new->prev = l->ini;
+	new->prox = l->ini->prox;
 
 	l->ini->prox->prev = new;
 	l->ini->prox = new;
@@ -85,17 +80,34 @@ int insere_inicio_lista(int item, t_lista *l)
 	return 1;
 }
 
-/*
-  Retorna o tamanho da lista em *tam.
-  Retorna 1 se a operação foi bem sucedida e zero caso contrário.
-*/
-int tamanho_lista(int *tam, t_lista *l){return 1;}
+int tamanho_lista(int *tam, t_lista *l)
+{
+	if (l->ini == NULL && l->fim == NULL)
+		return 0;
 
-/*
-  Insere o elemento item no final da lista.
-  Retorna 1 se a operação foi bem sucedida e zero caso contrário.
-*/
-int insere_fim_lista(int item, t_lista *l){return 1;}
+	*tam = l->tamanho;
+	return 1;
+}
+
+int insere_fim_lista(int item, t_lista *l)
+{
+	t_nodo *new;
+	
+	new = (t_nodo*) malloc (sizeof (t_nodo));
+	if (new == NULL)
+		return 0;
+
+	new->chave = item;
+	new->prox = l->fim;
+	new->prev = l->fim->prev;
+
+	l->fim->prev->prox = new;
+	l->fim->prev = new;
+
+	l->tamanho++;
+
+	return 1;		
+}
 
 /*
   Insere o elemento item na lista de maneira que ela fique em ordem
diff --git a/main.c b/main.c
index e073f7c..1658764 100644
--- a/main.c
+++ b/main.c
@@ -5,10 +5,16 @@
 int main ()
 {
 	t_lista l;
+	int tam;
 
 	inicializa_lista(&l);
 	insere_inicio_lista (10, &l);
-	if (!lista_vazia(&l)) printf("nao vazia\n");
+	insere_inicio_lista (5, &l);
+	tamanho_lista(&tam, &l);
+	printf ("tam: %d\n",tam);
+	insere_fim_lista (8, &l);
+	tamanho_lista(&tam, &l);
+	printf ("tam: %d\n",tam);
 
 	return 0;
 }
-- 
GitLab