Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e...

29
1 Listas Lineares continuando .......

Transcript of Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e...

Page 1: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

1

Listas Lineares

continuando .......

Page 2: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

2

Listas !  relembrando: listas lineares agrupa informações

referentes aum conjunto de elementos que, de alguma forma, se relacionam entre si

!  Uma lista linear ou está vazia, ou possui uma série de elementos (a1,a2, ....., an)‏

!  onde ai é um componente de algum conjunto S.

Page 3: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

3

Listas Encadeadas

Page 4: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

4

Tipo de Dados Recursivo !  Um tipo T recursivo, possui componentes que

pertencem ao tipo !  definem agregados de crescimento arbitrário

!  objetos do tipo recursivo podem ser implementados pelo uso de ponteiros

!  um componente é representado por um elemento contendo um ponteiro para o objeto struct { int a; no* proximo

} no;

Page 5: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

5

Listas Encadeadas

!  podem crescer e diminuir dinamicamente !  tamanho máximo não precisa ser conhecido a

priori !  Provêem flexibilidade permitindo que os ítens

sejam rearrumados eficientemente !  perda no tempo de acesso a qualquer item

arbitrário da lista

Page 6: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

6

A L I T S

Listas Encadeadas !  É um conjunto de itens organizados, como

um array (lista sequencial) !  em um array a organização é implícita (pela

posição) !  em uma lista encadeada a sequência de elementos

é especificada explícitamente, onde cada elemento contém um ponteiro para o próximo da lista.

Page 7: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

7

Listas Encadeadas !  No exemplo:

!  um elemento é identificado por uma letra !  cada elemento é representado por círculo !  Cada link é representado por uma seta

!  Detalhes que devem ser considerados: !  todo elemento possui um ponteiro !  o ponteiro do último elemento tem que especificar algum tipo

de próximo (aponta para si próprio ou NULL)‏

!  um ponteiro ou um elemento para o 1º da lista.

A L I T S head

Page 8: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

8

A L I T S

head

Listas Encadeadas !  algumas operações são mais eficientes do que

em lista sequencial !  mover um elemento com a identificação T do fim da

lista para o começo !  Mesmo que a lista seja muito longa, a mudança estrutural é

realizada através de 3 operações

Page 9: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

9

Listas Encadeadas !  Para inserção de um novo elemento X:

!  aloca-se memória para um elemento e atualiza-se os ponteiros

!  em lista sequencial seria necessário deslocar todos os elementos a partir do ponto de inserção;

!  apenas 2 links são alterados para esta operação - não importa quão longa é a lista

A L I T S head

X

Page 10: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

10

!  remoção de um elemento: !  basta alterar o ponteiro do elemento anterior ao

removido

!  o conteúdo de X (no exemplo) ainda existe, mas não é mais acessível pela lista

A L I T S head

X

Listas Encadeadas

Page 11: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

11

Listas Encadeadas !  Lista Encadeada x Sequencial

!  remoção e inserção são mais naturais na lista encadeada

!  outras operações já não são tão naturais !  Encontrar o k-ésimo elemento da lista

!  em uma lista sequencial - simplesmente acessar a[k] !  na lista encadeada é necessário percorrer k links.

!  Achar um ítem antes de um dado ítem

Page 12: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

12

Listas Encadeadas

Duplamente encadeada - ponteiros para duas direções !  um ponteiro para o próximo e um para o anterior

Simplesmente encadeada - ponteiros em uma direção

Page 13: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

13

Listas Encadeadas !  Exemplo: Suponha uma lista simplesmente encadeada

!  Cada nó consiste de: 1 palavavra com 1 floating point e outra com o ponteiro para o próximo nó

!  o fim da lista é marcado com um ponteiro com NULL

!  É desejável descobrir se algum nó possui um número igual a 1.0

!  Deve retornar Verdade se encontrar e Falso em caso contrário

Page 14: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

14

Listas Encadeadas typedef struct { float valor; tipo_nó * proximo } tipo_nó; tipo_nó * head; tipo_nó * prox; Acha_1()‏ { prox = head;

resultado = false;

while ( (prox != NULL) && (!resultado)){

if (prox->valor == 1.0)‏ resultado = true;

else prox = prox->proximo;

} return(resultado);

}

Page 15: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

15

Listas Encadeadas !  Inserção e Remoção

!  alocação dinâmica de memória !  malloc e free do C

!  Exemplo de uso: !  Rotina que toma conta do espaço livre de memória !  lista de memória livre

!  Ao liberar memória - inserção na lista !  Ao alocar memória - remoção da lista

Page 16: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

16

Listas Encadeadas - Inserção !  seja uma lista em que cada

elemento armazena um inteiro

!  inserir sempre no início

Estrutura usada struct { int info; tipo_no * proximo } tipo_no; tipo_no * head; head = NULL;

Protótipo da Função Insere(int valor)‏

head

Page 17: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

17

Listas Encadeadas - Inserção Insere(int valor)‏ { tipo_no * novo;

novo = malloc (sizeof(tipo_no)); if (!novo) return(false); novo->info = valor; novo->prox = head->prox; head->prox = novo; return(true);

}

Page 18: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

18

Listas Encadeadas - Remoção !  remover o 1º elemento, retornando o valor

armazenado !  Se remover de uma lista vazia?

head

Page 19: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

19

Listas Encadeadas - Remoção remove ()‏ { valor = INEXISTENTE;

if (head != NULL){ valor = head->valor; pt = head; head = head ->prox; free (pt); }else “lista vazia”; return (valor);

}

Page 20: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

20

Busca Listas Encadeadas

!  Busca valor em uma lista encadeada onde os elementos não seguem uma ordenação !  retorna o elemento que contém o valor procurado,

ou NULL, caso não encontre

head

Page 21: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

21

Busca Listas Encadeadas

busca_encadeada (valor, ant, pt)‏ { pt = head; ant = head;

while (pt != NULL) && ( pt->info != valor){ ant = pt; pt = pt->prox; }

}

head

Page 22: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

22

Busca Listas Encadeadas !  caso o valor esteja na lista

!  pt aponta para o elemento que contém o valor

!  senão estiver na lista !  pt aponta para NULL, pois o campo proximo do último

elemento aponta para NULL

head

Page 23: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

23

Listas Encadeadas - Inserção

!  Problema: inserir um valor em uma lista encadeada não ordenada, caso não exista !  como não existe ordenação, pode-se inserir no

início da lista

Page 24: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

24

Listas Encadeadas - Inserção Insere(valor){

pt =busca_encadeada (valor, ant, pt ); if (pt == NULL){ novo = malloc ();

novo->info = valor; novo->prox = head; head = novo; }

}

Page 25: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

25

Listas Encadeadas - Remoção

!  Problema: remover o elemento que armazenar um dado valor em uma lista encadeada não ordenada, caso exista

Page 26: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

26

Listas Encadeadas - Remoção remove_enc(valor)‏ {

busca_encadeada ( valor, ant, pt); if (pt != NULL){ ant->prox = pt->prox; if (ant == pt) head = pt->prox; free (pt); }else “não encontrado”;

}

Page 27: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

27

Busca em uma lista ordenada busca_enc_ord (valor, ant, pt)‏ {

ant = head; pt = head; while ((pt != NULL) && (pt->info < valor)){ ant = pt; pt = pt->prox; }

}

Page 28: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

28

Pensar !  Fazer um programa que:

!  Le números inteiros positivos a) Calcular média destes números b) Calcular mínimo e máximo destes números c) Listar os N maiores

!  Sejam x e y dois polinômios. Calcule a soma de x e y e armazene em z

Page 29: Listas Lineares - UFFboeres/slides_ed/ed5.pdf · Lista Encadeada x Sequencial ! remoção e inserção são mais naturais na lista encadeada ! outras operações já não são tão

29

Listas Encadeadas Exercício !  Fazer rotinas para inserção, remoção, e localizar

o n-ésimo elemento !  Fazer rotina para localizar o elemento antes

daquele de valor 5, considerando uma lista desordenada !  Qual a melhor representação: simplesmente

ou duplamente encadeada ?