filas - inf.ufg.brhebert/disc/aed1/aed1_08_filas.pdf · filas vários slides foram adaptados de...

50
Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura de Dados – Série de Livros Didácos - Informáca - UFRGS Prof Nádia Félix e Hebert Coelho Instuto de Informáca UFG

Upload: vonga

Post on 17-Dec-2018

244 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Filas

Vários slides foram adaptados de Nina Edelwais e Renata GalanteEstrutura de Dados – Série de Livros Didáticos - Informática - UFRGS

Prof Nádia Félix e Hebert CoelhoInstituto de Informática

UFG

Page 2: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Filas

Operações válidas:

Criar uma fila vazia Inserir um nodo no final da fila Excluir o nodo do início da fila Consultar Destruir a fila

InserçõesExclusões

eConsultas

FinalInício

Filas

Page 3: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Filas• A inserção de um item é feita de um lado da

fila, enquanto a retirada é feita do outro. – Primeiro a entrar, primeiro a sair: FIFO (First in

First Out)– Restrições quanto à manipulação:

inserções sempre no final, remoções sempre do início da fila;

• Exemplo:– Gerenciamento de documentos enviados para a

impressora

Page 4: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Tipos de Filas

• Basicamente existem dois tipos de implementações para uma fila: – Alocação estática com acesso sequencial– Alocação dinâmica com acesso encadeado

Page 5: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Filas

Filas implementadas por alocação estática

Page 6: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Fila sequencial estática

• Definida utilizando alocação estática e acesso sequencial dos elementos

• Definida utilizando um array• Implementação em módulos, temos que o

usuário tem acesso a apenas um ponteiro do tipo fila– Isso impede o usuário de saber como foi

implementada a fila e limita o seu acesso a apenas às funções que manipulam o início e o final da fila.

Page 7: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Fila SequencialFila *fi

3 1 3qtd início final

33 23 16dados

0 MAX-1

A principal vantagem de se utilizar um array na definição de uma fila estática éa facilidade de criar e destruir a fila. Já a sua principal desvantagem é a necessidade de definir previamente o tamanho do array e, consequentemente da fila.

Page 8: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Definindo o tipo de fila sequencial estática

• Definir o tipo de dado que será armazenado• Ponteiro para a estrutura que define a fila• Conjunto de funções visíveis• FilaEstatica.h• FilaEstatica.c

Page 9: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FilaEstatica.h

• O tamanho max do array utilizado na fila, representado pela constante MAX

• O tipo de dado que será armazenado na fila, struct aluno

• As funções disponíveis para se trabalhar com essa fila em especial

Page 10: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FilaEstatica.c

• As chamadas às bibliotecas necessárias à implementação da fila

• A definição do tipo que descreve o funcionamento da fila, struct fila

• As implementações das funções definidas no arquivo FilaEstatica.h

Page 11: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Note que

• O nosso tipo fila possui quatro campos:– início– final– qtd– array do tipo struct aluno, que é o tipo de dado a

ser armazenado

Page 12: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FilaEstatica.h

Page 13: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FilaEstatica.c

Page 14: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Criando uma fila

Fila *fi

0 0 0qtd início final

dados

0 MAX-1

Page 15: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Destruindo a Fila

Page 16: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Tamanho da Fila

Fila *fi

0 0 0qtd início final

dados

0 MAX-1

Page 17: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Fila Cheia

Page 18: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Fila Vazia

Page 19: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Inserindo um elemento na fila

33 23 16Dados

MAX-10

3

Qtd 12 aluno

0

inicio

3

fim

Page 20: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Inserindo um elemento na fila

33 23 16Dados

MAX-10

4

Qtd 12 al

0

inicio

4

fim

12

Page 21: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Inserindo um elemento na fila

23 16 18Dados

MAX-10

3

Qtd 12 al

1

inicio

MAX-1

fim

A operação de resto da divisãoé usada para simular uma fila circular. Assim, ao chegar à posição MAX (que não existeno array), assim o final será colocado na posição ZERO

….

Page 22: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Removendo um elemento da fila

33 23 16Dados

MAX-10

514

12

qtd inicio fim

fi

23 16Dados

MAX-10

523

12

qtd inicio fim

fi

Page 23: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Removendo um elemento da fila

Page 24: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Consultando o elemento no início da fila

• Em uma lista, pode-se acessar e recuperar as informações contidas em qualquer um dos seus elementos

• Já na fila, podemos acessar as informações apenas no elemento no início da fila.

Page 25: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Consultando o elemento no início da fila

Page 26: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Análise da complexidade

• Operações de Inserção, remoção e consulta envolvem apenas a manipulação de alguns índices, independentemente do número de elementos na fila.– Complexidade das operações é O(1)

Page 27: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Filas

Filas implementadas por encadeamento

Page 28: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

InserçõesExclusões e

Consultas

FinalInicio

F1 FnF3F2

Filas implementadas por encadeamentoFilas por encadeamento

Info prox

Para acessar o último nodo, é necessário percorrer toda a fila a partir do primeiro nodo

qtdfiminicioFila *fi;

dados

Page 29: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Operações sobre Filasimplementadas por encadeamentocom descritor

Criar uma fila vazia Inserir um nodo no final da fila Excluir o nodo do início da fila Consultar / modificar nodo do início da fila Destruir a fila

Filas por encadeamento

Page 30: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Definindo o tipo fila dinâmica encadeada• FilaDin.h

– Tipo de dado que será armazenado na fila, struct aluno

– struct fila– Os protótipos das funções

• FilaDin.c– As chamadas às bibliotecas necessárias– A definição do tipo que descreve cada elemento

da fila– A definição do nó descritor– A implementação das funções

Page 31: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FilaDin.h

Page 32: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FilaDin.c

Page 33: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Criando uma fila

Início Final Qtd = 0

NULL

FILA *fi;

Page 34: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Destruindo uma fila

26/10/17 Estrutura de Dados - Listas - Aula 2 34

início final qtd = 2li

33 23

NULL

início final qtd = 1li

33 23

NULL

Page 35: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

26/10/17 Estrutura de Dados - Listas - Aula 2 35

início final qtd = 2li

33 23

NULL

início final qtd = 2li

33 23

NULL

Destruindo uma fila

Page 36: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

26/10/17 Estrutura de Dados - Listas - Aula 2 36

início final qtd = 2li

33 23

NULL

início final qtd = 2li

33 23

NULL

Destruindo uma fila

Page 37: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Libera_fila

Page 38: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Tamanho da fila

Page 39: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Fila cheia

Page 40: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Fila Vazia

Page 41: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FILA *fi

FILA *fi Inicio fim qtd

/

FILA *fi

Filas por encadeamento

Inserção de um nodo na fila encadeada

FILA *fi

Inicio fim qtd

Inicio fim qtd

Inicio fim qtd

Page 42: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Inserção de um nodo na fila encadeada

Page 43: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FILA *fi

/

FILA *fi

/

Filas por encadeamento

Remoção de um nodo de fila encadeada

FILA *fi

/

FILA *fi

Inicio fim qtd

Inicio fim qtd Inicio fim qtd

Inicio fim qtd

Page 44: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Removendo um elemento da fila

Page 45: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

FILA *fi Inicio Final qtd

/?

Filas por encadeamento

Consultando um nodo de fila encadeada

Só o nodo do início da fila pode ser acessado

Acessado diretamente pelo endereço no descritor

Page 46: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Consulta Fila

Page 47: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Análise de complexidade

• Inserção, remoção e consulta envolvem apenas a manipulação de ponteiros, independentemente do número de elementos na fila.– A complexidade das operações O(1)

Page 48: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Exercício

• Crie uma função que imprima os elementos de uma fila

Page 49: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Exercício

• Crie uma função que imprima os elementos de uma fila

Page 50: Filas - inf.ufg.brhebert/disc/aed1/AED1_08_Filas.pdf · Filas Vários slides foram adaptados de Nina Edelwais e Renata Galante ... essa fila em especial. FilaEstatica.c • As chamadas

Exercício• Crie uma função que imprima os elementos de

uma fila