73
E STRUTURA DE D ADOS Prof. Dr. Daniel Caetano 2012 - 2 FILAS SEQUENCIAIS CIRCULARES

ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

ESTRUTURA DE DADOS

Prof. Dr. Daniel Caetano

2012 - 2

FILAS SEQUENCIAIS CIRCULARES

Page 2: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Objetivos

• Compreender o que é uma fila circular

• Compreender sua aplicação

• Capacitar para implementar filas circulares

• Atividade Estruturada!

Page 3: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Material de Estudo

Material Acesso ao Material

Apresentação http://www.caetano.eng.br/ (Aula 8)

Material Didático Estruturas de Dados (Parte 2) – Páginas ? a ?

Biblioteca Virtual Estruturas de Dados – -?

Page 4: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

RECORDANDO...

Page 5: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Recordando...

• Listas

– Ordenadas e não ordenadas

• Listas: acrescento / removo

– No lugar correto x No fim / De qualquer lugar

• Pilhas: acrescento / removo

– No fim / Do fim

• Filas: acrescento / removo

– No fim / Do início

• Qual era o problemas das filas?

Page 6: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Fila

• Tomemos esta fila

fila:

inicio: 4

fim: 9

• Se fim < n-2

– fim = fim + 1

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 7: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Tomemos esta fila

fila:

inicio: 4

fim: 9

• Se fim < n-2

– fim = fim + 1

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 8: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Tomemos esta fila

fila:

inicio: 4

fim: 9

• Se fim < n-2

– fim = fim + 1

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Mas não temos espaços vazios

no vetor?

Page 9: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

FILAS SEQUENCIAIS CIRCULARES

Page 10: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Filas Circulares

• Fila Circular: reaproveitar o início da fila

• Se marcador de inicio/fim supera o tamanho

– Voltamos o marcador para o início

Page 11: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Tomemos esta fila

fila:

inicio: 4

fim: 9

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 12: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Inserindo elemento

fila:

inicio: 4

fim: 9

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 13: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Inserindo elemento

fila:

inicio: 4

fim: 10

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 14: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Inserindo elemento

fila:

inicio: 4

fim: 10

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 15: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Inserindo elemento

fila:

inicio: 4

fim: 0

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 16: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Inserindo elemento

fila:

inicio: 4

fim: 0

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

100 66 75 33 99 100 22 15 90 28

Page 17: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Implementando Filas

• Inserindo elemento

fila:

inicio: 4

fim: 0

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

• Exemplo: vamos inserir o número 55?

0 1 2 3 4 5 6 7 8 9

55 66 75 33 99 100 22 15 90 28

Mas como saber se a fila está cheia/vazia agora?

Page 18: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

CONTROLANDO O TAMANHO DA FILA

Page 19: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares

• Relação entre início e fim...

– Não pode ser mais usada!

• Controle da quantidade de elementos

– “n” elementos

– “n” tem que ser menor que “MAX”

Page 20: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Inicializar

fila:

inicio: 0

fim: -1

num: 0

• E como é o algoritmo para enfileirar?

0 1 2 3

? ? ? ?

Page 21: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: -1

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

? ? ? ?

Page 22: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: -1

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

? ? ? ?

Page 23: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: -1

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

? ? ? ?

Page 24: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

? ? ? ?

Page 25: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

? ? ? ?

Page 26: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

? ? ? ?

Page 27: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

100 ? ? ?

Page 28: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 0 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

100 ? ? ?

Page 29: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 100?

0 1 2 3

100 ? ? ?

Page 30: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 ? ? ?

Page 31: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 0

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 ? ? ?

Page 32: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 1

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 ? ? ?

Page 33: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 1

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 ? ? ?

Page 34: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 1

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 ? ? ?

Page 35: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 1

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 75 ? ?

Page 36: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 1

num: 1 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 75 ? ?

Page 37: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 1

num: 2 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Exemplo: vamos inserir o número 75?

0 1 2 3

100 75 ? ?

Page 38: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 0

fim: 1

num: 2 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• ...

0 1 2 3

100 75 ? ?

Depois de algum tempo....

Page 39: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 3

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

100 75 90 66

Page 40: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 3

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

100 75 90 66

Page 41: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 4

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

100 75 90 66

Page 42: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 4

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

100 75 90 66

Page 43: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 0

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

100 75 90 66

Page 44: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 0

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

100 75 90 66

Page 45: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 0

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

45 75 90 66

Page 46: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 0

num: 3 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

45 75 90 66

Page 47: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 0

num: 4 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 45?

0 1 2 3

45 75 90 66

Page 48: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Tamanho de Filas Circulares • Enfileirar

fila:

inicio: 1

fim: 0

num: 4 • Se num < MAX

– fim = fim + 1

– Se fim == MAX, fim = fim - MAX

– Coloca novo valor no fim

– num = num + 1

• Vamos inserir o valor 99?

0 1 2 3

45 75 90 66

Page 49: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

REMOVENDO ELEMENTOS DE FILA CIRCULAR

Page 50: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 3

fim: 0

num: 2 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

Page 51: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 3

fim: 0

num: 2 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

66

Page 52: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 3

fim: 0

num: 2 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

Page 53: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 4

fim: 0

num: 2 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

Page 54: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 4

fim: 0

num: 2 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

Page 55: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 0

fim: 0

num: 2 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

Page 56: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 0

fim: 0

num: 2 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

Page 57: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 0

fim: 0

num: 1 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover um valor?

0 1 2 3

45 75 90 66

Page 58: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 0

fim: 0

num: 1 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover outro valor?

0 1 2 3

45 75 90 66

Page 59: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 0

fim: 0

num: 1 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover outro valor?

0 1 2 3

45 75 90 66

45

Page 60: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 0

fim: 0

num: 1 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover outro valor?

0 1 2 3

45 75 90 66

Page 61: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 1

fim: 0

num: 1 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover outro valor?

0 1 2 3

45 75 90 66

Page 62: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 1

fim: 0

num: 1 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover outro valor?

0 1 2 3

45 75 90 66

Page 63: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 1

fim: 0

num: 1 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover outro valor?

0 1 2 3

45 75 90 66

Page 64: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 1

fim: 0

num: 0 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover outro valor?

0 1 2 3

45 75 90 66

Page 65: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Removendo elementos... • Desenfileirar

fila:

inicio: 1

fim: 0

num: 0 • Se num > 0

– Remove valor do início

– inicio = inicio + 1

– Se inicio >= MAX, inicio = inicio - MAX

– num = num - 1

• Vamos remover mais um valor?

0 1 2 3

45 75 90 66

Fila Vazia!

Page 66: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

EXERCÍCIOS DE FIXAÇÃO

Page 67: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Exercício 1 • Faça um programa que apresente o seguinte

menu:

1. Enfileirar um número inteiro positivo

2. Desenfileirar um número e imprimir o seu dobro

3. Desenfileirar tudo, exibindo os valores sem alterações

4. Terminar o programa

Page 68: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Exercício 2 • Faça um programa que leia uma sequência de

caracteres (char), crie uma filaA, de chars, e uma filaB, de ints, e os enfileire:

– Se for uma letra, enfileire-o na fila A

– Se for um digito, converta-o para número inteiro e enfileire-o na fila B

• Ao final, desenfileire os valores de B e A, nesta ordem, imprimindo os valores.

DICAS:

• isdigit(x) retorna 0 se não for dígito (cctype)

• isalpha(x) retorna 0 se não for letra (cctype)

• Se x é um dígito (valor ASCII), x-’0’ é o valor numérico do dígito

Page 69: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

CONCLUSÕES

Page 70: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Resumo

• Filas: lista do tipo FIFO

• Fila Circular: reaproveitar espaços já liberados para novos elementos

• São úteis para – As mesmas coisas que fila

– São mais eficientes que as filas sequenciais simples

• TAREFA – Estudar!

Page 71: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

Próxima Aula

• Vimos várias listas... – Todas de tamanho

máximo pré-definido

– Elementos simples

• Como se livrar dessas limitações? – Precisaremos de alguns

conceitos novos!

– Estruturas e Ponteiros!

Page 72: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

PERGUNTAS?

Page 73: ESTRUTURA DE ADOS - CaetanoImplementando Filas •Inserindo elemento fila: inicio: 4 fim: 0 –fim = fim + 1 –Se fim == MAX, fim = fim - MAX –Coloca novo valor no fim •Exemplo:

BOM DESCANSO A TODOS!