A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

ESTRUTURAS DO TIPO FILA. Filas Uma fila é também uma lista linear, mas para esta estrutura as inserções só podem ser efetuadas em um extremo da lista,

Apresentações semelhantes


Apresentação em tema: "ESTRUTURAS DO TIPO FILA. Filas Uma fila é também uma lista linear, mas para esta estrutura as inserções só podem ser efetuadas em um extremo da lista,"— Transcrição da apresentação:

1 ESTRUTURAS DO TIPO FILA

2 Filas Uma fila é também uma lista linear, mas para esta estrutura as inserções só podem ser efetuadas em um extremo da lista, e todas as retiradas (e geralmente os acessos) são realizados no outro extremo da lista. Política FIFO: first in first out Modelo real clássico: fila de pessoas esperando o atendimento em um banco: as pessoas do início da fila são atendidas antes e as que chegam depois, entram no fim da fila Ordem das filas: Ordem de chegada

3 Filas Filas são usadas tipicamente quando deseja-se processar itens de acordo com sua ordem de chegada (FIFO): –Ex: filas do SO, simuladores, etc... As operações básicas definidas sobre um TAD Fila seriam semelhantes às operações definidas anteriormente para as pilhas e listas lineares

4 Operações definidas sobre o TAD Fila 1.Inicia(Fila): faz a inicialização da fila 2.Esvazia(Fila): Faz a fila ficar vazia 3.Vazia(Fila): Função que retorna TRUE se a fila está vazia e FALSE do contrário; 4.Enfileirar(x,Fila): Insere o elemento x no fim da Fila; 5.Desenfileirar(Fila, x): Retorna elemento x no início da Fila, eliminando-o da mesma; 6.Imprimir(Fila): imprime todos os elementos da fila

5 FILAS COM IMPLEMENTAÇÃO ATRAVÉS DE VETORES

6 Tipos de Representação x1x1 elementos... x2x2 xnxn Frente = 1 Retaguarda... MaxTam 2 Tradicional Em forma de Pilha x1x1 elementos Frente = 1 x2x2... xnxn Retaguarda MaxTam 2

7 Implementação da Estrutura da Fila const MaxTam = 100; InicioVetor = 1; type Ponteiro = integer; TipoItem = record Chave: TipoChave; {outras declarações desejadas...} end; TipoFila = record Item: array [1..MaxTam] of TipoItem; Frente: Ponteiro; Retaguarda: Ponteiro; end;

8 Operações sobre Filas usando Arranjo procedure Inicia(var Fila: TipoFila); begin Fila.Frente := InicioVetor; Fila.Retaguarda := Fila.Frente; end; procedure Esvazia(var Fila: TipoFila); begin Fila.Frente := InicioVetor; Fila.Retaguarda := Fila.Frente; end; function Vazia(var Fila: TipoFila): boolean; begin Vazia := Fila.Frente = Fila.Retaguarda; end;

9 Operações sobre Filas usando Arranjo procedure Imprimir (var Fila: TipoFila); var indice : Ponteiro; begin indice := Fila.Frente + 1; while indice <= Fila.Retaguarda do begin writeln(Fila.Item[indice].Chave); indice := indice +1; end end;

10 Implementação de Filas com Arranjos Procedimentos de Enfileirar e Desenfileirar: –Quando um elemento é enfileirado, a parte final da fila é esticada... –Quando um elemento é retirado da fila, a parte frontal da fila é contraída...

11 Operações sobre Filas usando Arranjo procedure Enfileira (x:TipoItem; var Fila:TipoFila); var indice : Ponteiro; begin if Fila.Retaguarda = MaxTam + 1 then writeln (Overflow) else begin Fila.Item[Fila.Retaguarda] := x; Fila.Retaguarda := Fila.Retaguarda + 1; end; procedure Desenfileira (var Fila:TipoFila; x:TipoItem); var indice : Ponteiro; begin if Vazia(Fila) then writeln (Fila Vazia) else begin x := Fila.Item[Fila.Frente]; Fila.Frente := Fila.Frente + 1; end;

12 Implementação de Filas com Arranjos Inserir os elementos 9, 6, 1, 10, 5, 8, e em seguida, exclui-los, na ordem informada RFRRRRRRFFFFFF A fila está vazia mas não é mais possível inserir elementos

13 Problemas com Filas Na seqüência anterior, a fila chega ao limite final do espaço de memória Se tentarmos inserir um novo elemento, o TAD vai nos retornar um erro, dando a falsa impressão de que não existe mais espaço disponível... Solução: No algoritmo de inserção, após a atualização de Frente, verificar se a fila ficou vazia, i.e, Frente = Retaguarda; se este for o caso, reinicializar (Frente = Retaguarda := InicioVetor;) F R

14 Problemas com Filas Mesmo assim ainda não resolve completamente o problema Em um vetor de 5 posições, as operações IIEIEIEIEI vai causar overflow, mesmo com a lista quase vazia Overflow!!! 7 Solução: Forçar Retaguarda a usar o espaço liberado por Começo, formando uma Fila Circular F R

15 Implementação de Filas com Arranjos Mesmo assim ainda não resolve completamente o problema No exemplo dado, realize as seguintes operações: I9, I6, E, I1, E, I10, E, I5, E, I8, E, I RFRRRRRRFFFFF 7 Overflow!!! Solução: Forçar Retaguarda a usar o espaço liberado por Começo, formando uma Fila Circular

16 Filas Circulares Mesma estrutura, inclusive com os ponteiros de controle frente e retaguarda Inicialmente também Frente = Retaguarda = InicioVetor Na fila circular, uma posição do vetor é utilizada para marcar o fim da fila no círculo: –Perde-se uma posição, mas ganha-se em agilidade Mesmas operações utilizadas em fila comum, mas com alterações em Enfileira, e Desenfileira e Imprimir Frente Retaguarda

17 Operações sobre Filas usando Arranjo procedure Enfileirar (x:TipoItem; var Fila:TipoFila); begin if Fila.Frente = (Fila.Retaguarda mod MaxTam ) + 1 then writeln(Overflow) else begin Fila.Item[Fila.Retaguarda] := x; Fila.Retaguarda := (Fila.Retaguarda mod MaxTam ) + 1 ; end; procedure Desenfileirar (var Fila:TipoFila; var x:TipoItem); begin if Vazia(Fila) then writeln(Underflow) else begin x := Fila.Item[Fila.Frente]; Fila.Frente := (Fila.Frente mod MaxTam) + 1; end;

18 Operações sobre Filas usando Arranjo procedure Imprimir (var Fila: TipoFila); var indice : Ponteiro; begin indice := Fila.Frente; while indice <> Fila.Retaguarda do begin writeln(Fila.Item[indice].Chave); indice := (indice mod MaxTam)+1; end writeln(Fila.Item[Fila.Retaguarda].Chave); end;


Carregar ppt "ESTRUTURAS DO TIPO FILA. Filas Uma fila é também uma lista linear, mas para esta estrutura as inserções só podem ser efetuadas em um extremo da lista,"

Apresentações semelhantes


Anúncios Google