Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Filas com Ponteiros, Notas de aula de Farmácia

Material de Apoio as aulas de Programação

Tipologia: Notas de aula

2011

Compartilhado em 02/07/2011

anderson-rafael-rentz-3
anderson-rafael-rentz-3 🇧🇷

5

(5)

43 documentos

1 / 11

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
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.
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
Política FIFO: first in first out
Ordem das filas: Ordem de chegada
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Filas com Ponteiros e outras Notas de aula em PDF para Farmácia, somente na Docsity!

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.

• 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

• Política FIFO: first in first out

• Ordem das filas: Ordem de chegada

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 Tipo

Abstrato de Dados Fila seriam semelhantes às

operações definidas anteriormente para as pilhas e

listas lineares:

  • (^) Criar Fila Vazia, testar se a fila está vazia, testar se a fila

está cheia, inserir e retirar elementos da fila e imprimir os

elementos da fila, retornar o tamanho da fila, ...

FILAS COM IMPLEMENTAÇÃO

ATRAVÉS DE PONTEIROS

Implementação da Fila com Ponteiros

• Cada item da fila é interpretado como um nó

• Usa-se do artifício da adição de um nó chamado nó-

cabeça, para indicar o início da fila

• O nó-cabeça é mantido no topo da fila para evitar

alguns testes desnecessários nas operações com a

fila quando ela está vazia:

  • (^) Com ele, os algoritmos de inserção/remoção são os

mesmos, seja qual for a posição de inserção/remoção

• O TipoFila também consiste de dois ponteiros,

FRENTE e RETAGUARDA, que apontam para a

mesma posição caso a fila esteja vazia

Implementação da Fila com Ponteiros

• Para “enfileirar” um novo elemento ( xn+1 ) :

1. Criar um novo nó;

2. Ligar esse novo nó após a nó que contém xn ;

3. Colocar nesse nó o novo item xn+

• Para “desenfileirar” o elemento x 1 :

1. Desligar o nó-cabeça da lista;

2. O nó que contém o item x 1 passa a ser o nó-cabeça

da lista

Implementação da Estrutura da Fila

type Ponteiro = ^TipoNo; TipoItem = record Chave: TipoChave; {outras declarações desejadas...} end; TipoNo = record Item: TipoItem; Prox: Ponteiro; end; TipoFila = record Frente: Ponteiro; Retaguarda: Ponteiro; end;

Operações sobre Filas usando Ponteiros

procedure Enfileirar (x:TipoItem; var Fila:TipoFila); begin new(Fila.Retaguarda^.Prox); Fila.Retaguarda := Fila.Retaguarda^.Prox; Fila.Retaguarda^.Item := x; Fila.Retaguarda^.Prox := nil; end; end; procedure Imprimir (Fila: TipoFila); var pont : Ponteiro; {Não passar a fila como referência. Ao sair do algoritmo, a fila estará com os elementos intactos} begin while not Vazia (F) do begin Desenfileirar (F, pont); writeln(pont^.Item.Chave); end; end;

Operações sobre Filas usando Ponteiros

procedure Desenfileirar (var Fila:TipoFila; var x:TipoItem); var Paux: Ponteiro; begin if Vazia(Fila) then writeln(‘Underflow’) else begin Paux := Fila.Frente^.Prox; Fila.Frente^.Prox := Paux^.Prox; x := Paux^.Item; dispose(Paux); end; end;