MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26...

26
MC202 - Estruturas de Dados Emilio Francesquini [email protected] Instituto de Computação - UNICAMP Aula 05 - 17 de março de 2017

Transcript of MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26...

Page 1: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

MC202 - Estruturas de DadosEmilio Francesquini

[email protected]

Instituto de Computação - UNICAMP

Aula 05 - 17 de março de 2017

Page 2: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Disclaimer

• Esses slides foram preparados para um curso de Estrutura deDados ministrado na UNICAMP

• Este material pode ser usado livremente desde que sejammantidos os créditos dos autores e da instituição.

• Muitos dos exemplos apresentados foram retirados demateriais preparados pelos Profs. A. Falcão, T. Kowaltowski eO. Lee da UNICAMP assim como do Prof. P. Feofiloff doIME-USP

Page 3: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas

MC202 - Aula 5 Pilhas 3 / 26

Page 4: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas

• Filas (=queues) Política FIFO: First In First Out• O primeiro que chega é o primeiro a sair

• Contraste com as Pilhas e sua política LIFO

MC202 - Aula 5 Pilhas 4 / 26

Page 5: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas

• Filas também são um tipo abstrato de dados (=AbstractData Type)

• Assim como no caso de pilhas, nós nem falamos sobre aimplementação mas já sabemos que para ser util ela terá asseguintes operações

• vazia (=empty) – Verifica se a fila está vazia• enfileirar/inserir (=enqueue) – Enfileira um elemento• desenfileirar/remover (=dequeue) – Desenfileira um elemento• consultar (=peek) – Olha o primeiro elemento da fila sem

retirá-lo

MC202 - Aula 5 Pilhas 5 / 26

Page 6: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas - Operação

• As seguintes frases resumem o comportamento de uma fila:• o elemento removido da fila é o que está lá há mais tempo• o primeiro elemento inserido na fila é o primeiro a ser

removido.

MC202 - Aula 5 Pilhas 6 / 26

Page 7: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas - Resumindo

• inicio: é a extremidade da fila que contém o elemento a serdesenfileirado

• fim: é a extremidade da fila que contém o elemento a serenfileirado

• inserir/enfileirar (enqueue) = inserir no fim• remover/desenfileirar (dequeue) = remover do inicio

MC202 - Aula 5 Pilhas 7 / 26

Page 8: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas - Implementação

• Assim como ocorreu com as pilhas, veremos duasimplementações de filas

• Estáticas – Utilizando vetores• Dinâmicas – Utilizando listas ligadas

MC202 - Aula 5 Pilhas 8 / 26

Page 9: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Estáticas

INIFIM

[0] [1] [2] [3] [4]

• Neste caso o tamanho máximo da fila é n = 5• INI sempre aponta para o início da fila, ou seja, o próximo

elemento a ser retirado• FIM sempre aponta para o fim da fila, ou seja, a próxima

posição livre no vetor onde um novo elemento deverá serenfileirado

• A fila está vazia se o INI == FIM

MC202 - Aula 5 Pilhas 9 / 26

Page 10: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

[0] [1] [2] [3] [4]

→ Insere(10)Insere(20)Insere(30)RemoveInsere(40)RemoveRemoveInsere(50)Insere(60)

MC202 - Aula 5 Pilhas 10 / 26

Page 11: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

10[0] [1] [2] [3] [4]

Insere(10)→ Insere(20)Insere(30)RemoveInsere(40)RemoveRemoveInsere(50)Insere(60)

MC202 - Aula 5 Pilhas 11 / 26

Page 12: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

10 20[0] [1] [2] [3] [4]

Insere(10)Insere(20)→ Insere(30)RemoveInsere(40)RemoveRemoveInsere(50)Insere(60)

MC202 - Aula 5 Pilhas 12 / 26

Page 13: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

10 20 30[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)→ RemoveInsere(40)RemoveRemoveInsere(50)Insere(60)

MC202 - Aula 5 Pilhas 13 / 26

Page 14: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

20 30[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)Remove→ Insere(40)RemoveRemoveInsere(50)Insere(60)

MC202 - Aula 5 Pilhas 14 / 26

Page 15: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

20 30 40[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)RemoveInsere(40)→ RemoveRemoveInsere(50)Insere(60)

MC202 - Aula 5 Pilhas 15 / 26

Page 16: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

30 40[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)RemoveInsere(40)Remove→ RemoveInsere(50)Insere(60)

MC202 - Aula 5 Pilhas 16 / 26

Page 17: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

40[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)RemoveInsere(40)RemoveRemove→ Insere(50)Insere(60)

MC202 - Aula 5 Pilhas 17 / 26

Page 18: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Exemplo

INIFIM

40 50[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)RemoveInsere(40)RemoveRemoveInsere(50)→ Insere(60)

MC202 - Aula 5 Pilhas 18 / 26

• Não é possível adicionarnovos elementos

• Mas há espaços vazios!• E agora?

Page 19: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas estáticas circulares

MC202 - Aula 5 Pilhas 19 / 26

Page 20: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas estáticas circulares

• Quando inserimos um elemento na fila• FIM se torna (FIM + 1) % TAMANHO

• Garantia que se chegar ao final, volta ao início• Permite que os espaços vazios sejam reutilizados

• Quando removemos um elemento da fila• INI se comporta de maneira equivalente ao FIM na inserção

• INI se torna (INI + 1) % TAMANHO

MC202 - Aula 5 Pilhas 20 / 26

Page 21: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Circulares – Exemplo

INIFIM

10 20 30 40[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)Insere(40)→ Insere(50)

MC202 - Aula 5 Pilhas 21 / 26

FIM = (FIM + 1) % TAMANHO →FIM = (4 + 1) % 5 →FIM = 0

Page 22: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Circulares – Exemplo

INIFIM10 20 30 40 50[0] [1] [2] [3] [4]

Insere(10)Insere(20)Insere(30)Insere(40)Insere(50)

MC202 - Aula 5 Pilhas 22 / 26

Problema 1: FIM apotaria para apróxima posição livre. Mas, aposição 0 está ocupada.Problema 2: FIM - 1 indicaria aposição do último elemento. Masagora vale -1.Problema 3: Quando FIM ==INICIO a fila está cheia ou vazia?

Page 23: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Circulares

Por isso fazemos algumas modificações• A fila agora também tem QTD_ELEMS além de INI, FIM e

TAMANHO• FIM agora sempre aponta para o último elemento, e não

para a próxima posição vazia

MC202 - Aula 5 Pilhas 23 / 26

Page 24: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Filas Estáticas – Limitações

• É necessário fixar um número máximo de elementos• Facilmente solucionável com filas dinâmicas usando listas

ligadas

MC202 - Aula 5 Pilhas 24 / 26

Page 25: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Mão na massa!

Let’s code!!

MC202 - Aula 5 Pilhas 25 / 26

Page 26: MC202 - Estruturas de Dadosfrancesquini/mc202/files/aula05.pdf · MC202 - Aula 5 Pilhas 22 / 26 Problema 1: FIM apotaria para a próxima posição livre. Mas, a posição 0 está

Exercício

Exercício 1 Implemente uma fila usando uma lista ligada simples.Exercício 2 Como você mudaria a sua implementação se elafosse uma lista duplamente ligada?Exercício 3 A exemplo do que fizemos com vetores, hávantagens em se usar uma lista ligada circular paraimplementar uma fila?Exercício 4 Implemente uma função que inverta a ordem doselementos de uma fila usando apenas a sua API, ou seja, vocênão pode usar informações sobre a implementação da fila (se éfeita usando listas ligadas ou vetores).Exercício 5 Implemente uma fila dinâmica que utiliza um vetorcomo base. (Dica: defina uma regra clara e simples a ser usadaquando o vetor deverá crescer ou diminuir)

MC202 - Aula 5 Pilhas 26 / 26