Created
June 7, 2015 12:38
-
-
Save joffilyfe/d2560d70134c9260e0f8 to your computer and use it in GitHub Desktop.
Lista encadeada (será que tá certo?)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
// Estruturas | |
typedef struct caixa { | |
int dado; | |
struct caixa *proximaCaixaPonteiro; | |
} Caixa; | |
typedef Caixa *PonteiroParaInicio; | |
// Funções | |
void inicializaLista(PonteiroParaInicio *l); | |
int inserindoCaixa(PonteiroParaInicio *l, int valor); | |
void mostrarLista(PonteiroParaInicio l); | |
int procuraItem(PonteiroParaInicio l, int procurado); | |
int removendoCaixa(PonteiroParaInicio *l, int valor); | |
// MAIN | |
int main(void) { | |
int existe = 0; | |
PonteiroParaInicio lista; | |
inicializaLista(&lista); | |
inserindoCaixa(&lista, 1); | |
inserindoCaixa(&lista, 2); | |
inserindoCaixa(&lista, 3); | |
mostrarLista(lista); | |
// existe = procuraItem(lista, 1); | |
// printf("Existe (1 = sim): %d\n", existe); | |
// removendoCaixa(&lista, 3); | |
// printf("===============\n"); | |
// mostrarLista(lista); | |
removendoCaixa(&lista, 2); | |
mostrarLista(lista); | |
return 0; | |
} | |
int removendoCaixa(PonteiroParaInicio *l, int valor) { | |
PonteiroParaInicio Primeiro, Atual, Anterior; | |
Anterior = (Caixa*)malloc(sizeof(Caixa)); | |
Atual = (Caixa*)malloc(sizeof(Caixa)); | |
Primeiro = *l; | |
//Lista vazia? Sai do programa | |
if (Primeiro == NULL) return 0; | |
// Se for o primeiro, apontamos a lista para o segundo e removemos o primeiro | |
if (Primeiro->dado == valor) { | |
*l = Primeiro->proximaCaixaPonteiro; | |
free(Primeiro); | |
return 1; | |
} | |
for (Atual = *l; Atual != NULL && Atual->dado != valor; Atual = Atual->proximaCaixaPonteiro) { | |
Anterior = Atual; | |
} | |
// O atual é NULL, ou seja, chegamos ao fim da lista e não achamos, então saimos do programa | |
if (Atual == NULL) return 0; | |
// Decomente para ver os itens sendo achados | |
// printf("Atual achado: %d\n", Atual->dado); | |
// printf("Anterior achado: %d\n", Anterior->dado); | |
// O anterior vai apontar para o que o Atual (achado) aponta | |
// Se o atual aponta pra NULL, quer dizer que o anterior agora é o ultimo | |
Anterior->proximaCaixaPonteiro = Atual->proximaCaixaPonteiro; | |
free(Atual); | |
return 1; | |
} | |
// Coloca um item no inicio da lista | |
int inserindoCaixa(PonteiroParaInicio *l, int valor) { | |
//Precisamos criar uma nova caixa que vai no inicio. | |
PonteiroParaInicio novo = (Caixa*)malloc(sizeof(Caixa)); | |
// Dizemos que o proximo que apontamos é o que estava guardado na lista | |
// o valor do novo é passado pela função | |
// e finalmente dizemos que a lista aponta agora para o novo | |
novo->proximaCaixaPonteiro = *l; | |
novo->dado = valor; | |
*l = novo; | |
return 1; | |
} | |
// Procurando um item na lista, se ele existir o for para e retorna 1 | |
int procuraItem(PonteiroParaInicio l, int procurado) { | |
PonteiroParaInicio Atual = (Caixa*)malloc(sizeof(Caixa)); | |
for(Atual = l; Atual != NULL; Atual = Atual->proximaCaixaPonteiro) { | |
if (Atual->dado == procurado) { | |
// printf("Existe!\n"); | |
return 1; | |
} | |
} | |
return 0; | |
} | |
// Não precisamos passar *l porque não queremos alterar nada dentro da lista | |
void mostrarLista(PonteiroParaInicio l) { | |
// Precisamos de um ponteiro do tipo Caixa alocando | |
// uma caixa para podermos guardar sempre o proximo | |
PonteiroParaInicio Atual = (Caixa*)malloc(sizeof(Caixa)); | |
int i = 0; | |
for (Atual = l; Atual != NULL; Atual = Atual->proximaCaixaPonteiro, i++) { | |
printf("%d - %d\n", i, Atual->dado); | |
} | |
} | |
// Diz que a lista é nula (inicializa) | |
void inicializaLista(PonteiroParaInicio *l) { | |
if (*l != NULL ) { | |
printf("Lista ja inicializada.\n"); | |
exit(1); | |
} else { | |
printf("Inicializando lista.\n"); | |
*l = NULL; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment