Você está na página 1de 4

ESTRUTURAS DE DADOS

Prof. H. Senger

1 Listas
Existem duas maneiras bastante utilizadas na construo de listas.

Utilizando vetores

Utilizando alocao dinmica de memria

2 Implementao de LISTAS usando vetores


A implementao de listas baseada em vetores traz alguns problemas:
Necessidade de deslocar os dados existentes, cada vez que um dado tiver de ser
removido ou includo na lista. No exemplo abaixo, se quisermos inserir um novo dado
na posio 1 do vetor, preciso deslocar para frente todos os dados que esto a
partir dessa posio, at o fim.

4
R

5
D

...

Dados a serem deslocados uma posio frente


Posio onde o novo
dado deve ser includo

Tamanho fixo: Depois que o programa foi compilado e iniciou a execuo, no


mais possvel mudar o tamanho do vetor.

Soluo : Implementar de outra forma. Se possvel, de um modo que

Permita acrescentar e remover dados, consumindo a quantidade de memria


exata ( s o necessrio, nem mais, nem menos )

No exija o deslocamento dos dados a cada insero/remoo

3 Implementao de LISTAS usando alocao dinmica


De agora em diante, os dados da lista no mais sero guardados em um vetor, mas em
clulas com o seguinte aspecto :
Primeiro

Joo

Yara

Ana

Note que cada clula contm um dado, e aponta (isto , indica) qual a prxima clula.
3.1

Criao de uma lista

O algoritmo abaixo fica constantemente incluindo novos dados na lista :


Loop

/* loop infinito */
Ler_teclado (novo_dado);
Criar (nova_clula);
Nova_clula novo_dado; /* guarda novo_dado em nova_celula*/
Atualiza( Primeiro);

Fim-loop
3.2

Destruio da lista

medida que o programa no precise mais de um dado da lista, ele pode remov-lo. O
algoritmo abaixo fica continuamente retirando dados da lista, destruindo a clula de onde
o dado foi retirando e liberando a memria:
Loop

/* loop infinito */
Dado contedo da clula; /* guarda o contedo da primeira clula*/
Utiliza(dado);

/* faz alguma coisa com o dado ... */

Segundo Prximo_de (Primeiro); /* guarda quem o segundo */

Destri_celula_indicada_por (Primeiro);
Primeiro Segundo;

/*Atualiza o indicador de incio da lista*/

Fim-loop

PROBLEMA:
Imagine como construir um programa com as seguintes caractersticas :

tem de armazenar ( na memria ) uma grande quantidade de dados

esse programa ser executado juntamente com outros programas no mesmo


computador, e portanto, ele s deve Alocar (reservar, usar) a quantidade de
memria realmente necessria

em algum momento, o usurio pode pedir para


digitar mais dados
apagar alguns dados existentes

SOLUO:
Esse programa deveria possuir o seguinte algoritmo :
Loop

/* loop infinito */
L_teclado_ou_mouse (comando);
Se ( comando = Incluir) ento
Incio
Ler_teclado (novo_dado);
Criar (nova_clula);
Nova_clula novo_dado; /* guarda novo_dado */
Atualiza( Primeiro);
Fim-se
Seno Se ( comando = Apagar) ento
Incio
Segundo Prximo_de (Primeiro); /* guarda end. do segundo */
Destri_celula_indicada_por (Primeiro);
Primeiro Segundo; /*Atualiza o indicador de incio da lista*/

Fim-se;
Fim-loop

Você também pode gostar