terça-feira, 8 de janeiro de 2013

Lista de exercícios EDA - Listas encadeadas

Esse arquivo cabeçario eu criei com base nos métodos de exemplos mostrados no livro "Introdução a Estruturas de Dados - José Lucas Rangel.

Para inseri-lo em seu programa C, basta fazer a cópia do arquivo e salvar com extensão .h (utils.h). Depois basta incluir ele no código fonte que deseja utilizar com o comando #include. Exemplo:

#include <stdio.h>
int main (void) {
    Lista *l;
    l = lst_cria ();
    l = lst_insere (l, 2000);
    lst_libera (l);
    return 0;
}


Curtam meu blog pô, e compartilha também :D!! Até mais!

typedef struct lista {
int value;
struct lista *prox;
} Lista;

/* função de criação: retorna uma lista vazia */
Lista *lst_cria (void) {
return NULL;
}

/* inserção no início: retorna lista atualizada */
Lista *lst_insere (Lista *l, int i) {
Lista *novo = (Lista *) malloc(sizeof(Lista));
novo->value = i;
novo->prox = l;
return novo;
}

/* função imprime:  imprime valores dos elementos */
void lst_imprime (Lista *l) {
Lista *p; /* variável auxiliar para percorrer a lista */

for (p = l; p != NULL; p = p->prox) {
printf ("Value = %d\n", p->value);
}
}

/* função vazia: retorna 1 se vazia ou 0 se não vazia */
int lst_vazia (Lista *l) {
if (l == NULL)
return 1;
else
return 0;
}

/* função busca: busca o elemento na lista */
Lista * lst_busca (Lista * l , int v) {
Lista * p;
for (p = l; p != NULL; p = p->prox) {
if (p->value == v)
return p;
}
return NULL; /* não achou o elemento */
}

/* função retirra: retira o elemento da lista */
Lista *lst_retira (Lista *l, int v) {
Lista *ant = NULL; /* ponteiro para o elemento anterior */
Lista *p = l; /* ponteiro para percorrer a lista */

/* procura o valor na lista, guardando o anterior */
while (p != NULL && p->value != v) {
ant = p;
p = p->prox;
}

/* verifica se achou o elemento */
if (p == NULL)
return l; /* não achou: retorna a lista original */

/* retira o elemento */
if (ant == NULL)
/* retira o elemento de inicio*/
l = p->prox;
else
/* retira o elemento do meio da lista */
ant->prox = p->prox;

free (p);
return l;
}

/* função libera: libera o espaço em memória ocupado pela lista */
void lst_libera (Lista *l) {
Lista * p = l;

while (p != NULL) {
Lista * t = p->prox; /* guarda referência para o próximo elemento */
free (p); /* libera a memória apontada por p */
p = t;  /* faz p apontar para o próximo */
}
}

Nenhum comentário:

Postar um comentário

Novidade!!! Agora vamos ter canal no Youtube =D

Fala pessoal tudo beleza, estou sumido a correria está forte por aqui. Estou querendo dar um start em um projeto antigo que vem desde o temp...