Você está na página 1de 6

Programar em C/Listas encadeadas - Wikilivros

http://pt.wikibooks.org/wiki/Programar_em_C/List...

Programar em C/Listas encadeadas


Origem: Wikilivros, livros abertos por um mundo aberto. < Programar em C Listas encadeadas so estruturas de dados lineares e dinmicas, a grande vantagem que elas possuem em relao ao uso de vetor o fato de terem tamanho mximo relativamente innito (o tamanho mximo o da memria do computador), ao mesmo tempo que podem ter o tamanho mnimo de 1 elemento evitando o desperdcio de memria.

ndice
1 2 3 4 Primitivas Lista encadeada linear Iniciar uma lista Insero 4.1 Insero no incio 4.2 Insero no m 5 Remoo 5.1 Remoo no incio 5.2 Remoo no m 6 Exibio 6.1 Do m para a raiz 6.2 Da raiz para o m

Primitivas
No existe nenhuma normalizao quanto as primitivas usadas para a manipulao de uma lista. Em baixo voc pode ver uma lista com algumas delas . Colocar o ndice sobre o primeiro elemento da lista. Colocar o ndice sobre o ltimo elemento da lista . Colocar o ndice sobre o elemento que segue o elemento atual . Colocar o ndice sobre o elemento que precede o elemento atual . Vericar se a lista est vazia : Se a lista estiver vazia retorna verdadeiro, se no, falso. Vericar se o primeiro elemento : Retorna verdadeiro se o elemento atual
1 de 6 12-10-2011 11:53

Programar em C/Listas encadeadas - Wikilivros

http://pt.wikibooks.org/wiki/Programar_em_C/List...

o primeiro, se no, falso. Vericar se o ltimo elemento : Retorna verdadeiro se o elemento atual o ltimo, se no, falso. Vericar o nmero de elementos da lista : Retorna o nmero de elementos da lista. Adicionar um elemento no incio : Adicionar um elemento antes do primeiro elemento da lista . Adicionar um elemento no m : Adicionar um elemento depois do ltimo elemento da lista . Insero : Inserir um elemento antes do elemento atual . Troca : Trocar o elemento atual . Remoo : Remover o elemento atual . Listar todos os elementos da lista .

Lista encadeada linear


Cada n ou elemento de uma lista encadeada ir possuir guardar o valor do n e o endereo do prximo n. Em uma lista encadeada linear o ultimo elemento aponta para NULL . struct No{ char *p_dados; struct No *p_prox; };

Iniciar uma lista


A funo abaixo demonstra como iniciar uma lista criando o espao da raiz na memria. void criar_Lista(struct No **p_Raiz){ *p_Raiz = NULL; }

Insero
Existem 3 tipos de insero em uma lista, pode-se inserir no comeo, no nal ou entre dois elementos da lista.

Insero no incio
2 de 6 12-10-2011 11:53

Programar em C/Listas encadeadas - Wikilivros

http://pt.wikibooks.org/wiki/Programar_em_C/List...

int inserir_No_Inicio(struct No **p_Raiz, char *p_String){ struct No *p_Novo; /** Alocao dinmica da memoria */ if((p_Novo = (struct No *) malloc(sizeof(struct No))) == NULL ) puts( "Falta Memoria\n"); return -1 ; } p_Novo->p_dados = p_String; if(*p_Raiz == NULL){ *p_Raiz = p_Novo; p_Novo->p_prox = NULL; }else{ p_Novo->p_prox = *p_Raiz; *p_Raiz = p_Novo; } }

Insero no m
int inserir_No_Fim(struct No **p_Raiz, char *p_String){ struct No *p_Novo; if(( p_Novo = (struct No *) malloc(sizeof(struct No))) == NULL puts( "Falta Memoria\n"); return -1 ; } p_Novo->p_dados = p_String; p_Novo->p_prox = NULL; if(*p_Raiz == *p_Raiz = else{ struct No e_atual = NULL) p_Novo; *e_atual; *p_Raiz; /*@ Elemento atual*/ /*@ Primeiro elemento*/

while(e_atual->p_prox != NULL){ e_atual = e_atual->p_prox; } e_atual->p_prox = p_Novo; } }

3 de 6

12-10-2011 11:53

Programar em C/Listas encadeadas - Wikilivros

http://pt.wikibooks.org/wiki/Programar_em_C/List...

Remoo
Assim como na insero tambm existem 3 tipos de remoo, no incio, no m ou entre dois elementos da lista.

Remoo no incio
void remover_No_Inicio(struct No **p_Raiz){ if(*p_Raiz == NULL) printf("\nA lista ja esta vazia\n"); else{ struct No *p_atual; p_atual = *p_Raiz; *p_Raiz = (*p_Raiz)->p_prox; free(p_atual); } }

Remoo no m
void remover_No_Fim(struct No **p_Raiz){ if(*p_Raiz == NULL) printf("\nA lista ja esta vazia"); else{ struct No *p_atual, *p_anterior ; p_atual = *p_Raiz; while(p_atual->p_prox != NULL){ p_anterior = p_atual ; p_atual = p_atual->p_prox; } p_anterior->p_prox = NULL; free(p_atual); } }

Exibio
Do m para a raiz
void mostrar_Do_Fim_Para_Raiz(struct No *p_Raiz){

4 de 6

12-10-2011 11:53

Programar em C/Listas encadeadas - Wikilivros

http://pt.wikibooks.org/wiki/Programar_em_C/List...

if(p_Raiz == NULL) printf("\nLista vazia"); else{ struct No *p_Atual_Corredor, *p_Atual_Fim; p_Atual_Corredor = p_Raiz; p_Atual_Fim = p_Raiz; while(p_Atual_Fim->p_prox != NULL){ //ir para o ultimo elemento p_Atual_Fim = p_Atual_Fim->p_prox; } while(p_Atual_Corredor != p_Atual_Fim){ if(p_Atual_Corredor->p_prox == p_Atual_Fim){ printf(" <- %s", p_Atual_Fim->p_dados); p_Atual_Fim = p_Atual_Corredor; p_Atual_Corredor = p_Raiz; } else p_Atual_Corredor = p_Atual_Corredor->p_prox; } printf(" <- %s", p_Atual_Fim->p_dados); } }

Da raiz para o m
void mostrar_Da_Raiz_Para_Fim(struct No *p_Raiz){ if(p_Raiz == NULL) printf("\nLista vazia"); else{ struct No *p_atual; p_atual = *p_Raiz; while(p_atual != NULL){ printf("%s", p_atual->p_dados); p_atual = p_atual->p_prox; } } } Obtido em "http://pt.wikibooks.org/w/index.php?title=Programar_em_C /Listas_encadeadas&oldid=227144" Categoria: Livro/Programar em C Esta pgina foi modicada pela ltima vez s 23h10min de 8 de Outubro de 2011. Este texto disponibilizado nos termos da licena Creative Commons Atribuio-Compartilhamento pela mesma Licena 3.0 Unported; pode estar

5 de 6

12-10-2011 11:53

Programar em C/Listas encadeadas - Wikilivros

http://pt.wikibooks.org/wiki/Programar_em_C/List...

sujeito a condies adicionais. Consulte as Condies de Uso para mais detalhes.

6 de 6

12-10-2011 11:53

Você também pode gostar