Professional Documents
Culture Documents
Listas encadeadas
Definio
Lista linear uma sequncia de itens L = [x1, x2, ..., xn], n 0, cujas propriedades estruturais dependem apenas da posio relativa de seus itens. Se n = 0, dizemos que a lista L vazia; do contrrio, valem as seguintes propriedades:
x1 xn xi
o primeiro item de L; o ltimo item de L; precedido pelo item xi-1 e seguido pelo item xi+1 em L, para 1 < i < n.
Em outras palavras, a caracterstica fundamental de uma lista linear sua organizao unidimensional, que permite dizer precisamente onde ela comea e onde ela termina. Algumas operaes que podemos efetuar com uma lista linear L so as seguintes: Inserir um item na i-sima posio de L. Remover o item da i-sima posio de L. Acessar o item da i-sima posio de L. Determinar se um item x pertence a L. Determinar o total de itens em L. Ordenar os itens em L.
(Pereira, S.L. Estruturas de Dados Fundamentais: Conceitos e Aplicaes. So Paulo: rica, 2008, pg. 21)
Estruturas de Dados
Listas encadeadas criados na memria sob demanda, ou seja, medida que forem necessrios, por meio de mecanismos de alocao dinmica de memria. O programa a seguir ilustra a implementao de uma lista linear de nmeros inteiros representada por encadeamento em linguagem C.
#include <stdio.h> struct regLista { int valor; struct regLista *prox; }; int main() { int numero; struct regLista *inicio, *aux, *ant; /* inicializando a varivel inicio com um endereco vazio */ inicio = NULL; while(1) { printf(Informe o numero:\n); scanf(%d, &numero); if( numero < 0 ) break; /* criando uma varivel struct regLista dinamicamente */ aux = (struct regLista *) malloc( sizeof(struct regLista) ); /* preenchendo os campos da varivel criada dinamicamente */ aux->valor = numero; aux->prox = NULL; if( inicio == NULL ) inicio = aux; else ant->prox = aux; ant = aux; } /* imprimindo os valores da lista */ printf(\n\n\nConteudo da lista:\n); aux = inicio; while ( aux != NULL ) { printf(%d\n, aux->valor); aux = aux->prox; } return 0; }
Estruturas de Dados
Listas encadeadas Esquematicamente podemos representar o estado das variveis do programa anterior da forma apresentada a seguir. No incio do programa: numero inicio aux ant
Aps a digitao dos valores 5, 10, 2, 3 e -1 por parte do usurio, na sada do looping de entrada de dados, o estado da memria seria: numero inicio ant aux
-1
valor 5
prox
valor 10