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

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

Filas  São utilizadas em aplicações onde são impostos critérios para a inserção e retirada de elementos cuja ordem não depende da ordem natural dos valores.

Apresentações semelhantes


Apresentação em tema: "Filas  São utilizadas em aplicações onde são impostos critérios para a inserção e retirada de elementos cuja ordem não depende da ordem natural dos valores."— Transcrição da apresentação:

1 Filas  São utilizadas em aplicações onde são impostos critérios para a inserção e retirada de elementos cuja ordem não depende da ordem natural dos valores dos dados.  FIFO “first in first out”: o primeiro elemento a ser retirado é o primeiro que tiver sido inserido, ex.: fila de banco.

2 Filas  As filas exigem acesso às duas extremidades do vetor: a) começo - onde é feita a retirada; e b) fim - onde é feita a inserção.  Definição de filas - forma geral: tipo fila_vet :: reg (comeco:int; termino:int; elementos: vet [1..10] de dado); var f: fila_vet; i,j: dado;

3 Operações básicas  Inicialização f.comeco <- 1; f.termino <- 0;  Inserção Se f.termino =10 entao erro {excesso de elementos} Senao inicio f.termino <- f.termino + 1; f.elementos[f.termino] <- i; fim;

4 Definindo e inicializando filas

5 Operações básicas  Retirada: Se f.termino < f.comeco entao nada { fila vazia } Senao f.comeco <- f.comeco + 1;  Consulta ao elemento no começo da fila Se f.termino < f.comeco entao erro {fila vazia} Senao j <- f.elementos[f.comeco];

6 Operações básicas Fila Simples Tipo fila_vet :: reg (comeco:int; termino:int; elementos: vet [1..10] de dado); var f: fila_vet; i,j: dado; //Inicialização f.comeco <- 1; f.termino <- 0; //Inserção Se f.termino =10 entao erro {excesso de elementos} Senao inicio f.termino <- f.termino + 1; f.elementos[f.termino] <- i; fim; //Retirada: Se f.termino < f.comeco entao nada { fila vazia } Senao f.comeco <- f.comeco + 1; //Consulta ao elemento no começo da fila Se f.termino < f.comeco entao erro {fila vazia} Senao j <- f.elementos[f.comeco];

7 Representação na memória  Após a inicialização, a fila vazia tem o seguinte aspecto:  A atribuição do valor 1 inicial a f.comeco é para garantir que f.termino < f.comeco notando que se f.comeco = f.termino não indica fila vazia e sim uma fila com somente um elemento. A inserção dos elementos: 26,18,12,9,3,11,4,2,13 faz:

8 Representando na memória  Havendo 4 retiradas da fila temos: Como a retirada envolve o incremento de f.comeco nota-se que a fila vai se deslocando da esquerda para a direita do vetor.  Para inserir mais um elemento (17, por exemplo) soma-se 1 a f.termino, o qual passa a conter o índice 10, posição em que colocamos o valor 17. Se agora quisermos inserir mais um valor, isso não será possível (f.termino = 10 indica erro se for tentada uma inserção) o que de certo modo é absurdo, já que as posições 1 a 4 estão livres

9 Resolvendo inconsistências  Para permitir a reutilização de posições já ocupadas, inserimos mais um componente “f.tamanho” que indica quantos elementos existem na fila no momento. Portanto as operações serão executadas conforme os algoritmos:  Inicialização: f.comeco <- 1; f.termino <- 0; f.tamanho <- 0;

10 Resolvendo inconsistências  Inserção: Se f.tamanho = 10 entao erro {excesso de elementos} Senao inicio f.tamanho <- f.tamanho + 1; f.termino <- (f.termino mod 10) + 1; f.elementos[f.termino] <- i; fim; Antes de incrementar f.termino tomamos o resto de sua divisão pelo n° de elementos do vetor, ex.: para inserir mais um elemento, f.termino será calculado por 10 mod 10 + 1 e o novo elemento será inserido na primeira posição do vetor.

11 Resolvendo inconsistências  Retirada: Se f.tamanho = 0 entao nada {fila vazia} Senão inicio f.tamanho <- f.tamanho - 1; f.comeco <- (f.comeco mod 10) + 1; fim;  Consulta: Se f.tamanho = 0 entao erro {fila vazia} Senao j <- f.elementos[f.comeco];

12 Operações básicas Fila Circular Tipo fila_vet :: reg (comeco:int; termino:int; elementos: vet [1..10] de dado); var f: fila_vet; i,j: dado; /* Inicialização: */ f.comeco <- 1; f.termino <- 0; /* Inserção: */ Se f.tamanho = 10 entao erro {excesso de elementos} Senao inicio f.tamanho <- f.tamanho + 1; f.termino <- (f.termino mod 10) + 1; f.elementos[f.termino] <- i; fim; /* Retirada: */ Se f.tamanho = 0 entao nada {fila vazia} Senão inicio f.tamanho <- f.tamanho - 1; f.comeco <- (f.comeco mod 10) + 1; fim; /* Consulta: */ Se f.tamanho = 0 entao erro {fila vazia} Senão j <- f.elementos[f.comeco];


Carregar ppt "Filas  São utilizadas em aplicações onde são impostos critérios para a inserção e retirada de elementos cuja ordem não depende da ordem natural dos valores."

Apresentações semelhantes


Anúncios Google