Estrutura de Dados (DPADF 0056) Aula 5 – Estr. Clássicas - Fila Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.

Slides:



Advertisements
Apresentações semelhantes
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Advertisements

Programação Avançada I
Programação II Estruturas de Dados
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
FILAS (Queues) Estrutura linear de acesso seqüencial que ordena seus elementos pela seqüência cronológica de sua entrada; Estrutura FIFO (First In First.
Algoritmos e Estruturas de Dados
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
INTELIGÊNCIA ARTIFICIAL
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
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.
Vetores Unidimensionais Prof. Gale. A Variável A  Ilustrando: O que aconteceria no algoritmo... A  3 Escreva A A  5 Escreva A 3 5.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Estrutura de Dados Prof. André Cypriano M. Costa
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
INE5408 Estruturas de Dados Ponteiros, passagem de parâmetros e modelos de memória.
INE5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas - Listas duplamente encadeadas.
INE5408 Estruturas de Dados Alocação Dinâmica de Memória.
Estrutura de Dados (DPADF 0056)
Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Estrutura de Dados (DPADF 0056) Aula 8 – Estr. Clássicas - Lista Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Algoritmos e Programação utilizando Visualg
INE5408 Estruturas de Dados
INF1007: Programação 2 8 – Listas Encadeadas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Sistemas de Controle III N8SC3
SISTEMAS OPERACIONAIS
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
INF1007: Programação 2 2 – Alocação Dinâmica
INE5408 Estruturas de Dados
INE5408 Estruturas de Dados
IP – Listas Prof. Eduardo Falcão.
INE5408 Estruturas de Dados
Algoritmos e Estruturas de Dados I
Sistemas de Redes de Filas
Algoritmos e Estruturas de Dados I
Memórias cache CPU procura por dados em L1, depois em L2 e finalmente na memória principal CPU registradores ALU L1 cache barramento de cache barramento.
Prof. Dr. Rui Carlos Botter
Sistemas de Controle III N8SC3
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
INF1007 – Programação 2 9 – Pilhas
INF1007: Programação 2 9 – Tipos Abstratos de Dados
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Estruturas de Dados Aula 5: Matrizes
Estrutura de dados Pilhas e filas
FUNDAMENTO DE PROGRAMAÇÃO
CONCEITO DE VARIÁVEIS ESTÁTICAS
Introdução à Programação BCC 201 Aula
Árvores.
FUNDAMENTO DE PROGRAMAÇÃO PROF. WELLINGTON FRANCO
Algoritmos e Estruturas de Dados I
Programação de Computadores I – Ponteiros
Algoritmos e Programação I
Listas Encadeadas.
Fundamentos de Programação 1
Estruturas de Dados Dinâmicas
Estruturas de Dados aula 4
Tipos Abstratos de Dados
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Instalação e Manutenção de Computadores Técnico em Informática MAI1
Programação de Computadores I – Ponteiros
Filas Prof. Kariston Pereira
Prof. Rafael Mesquita Fila Prof. Rafael Mesquita
Algoritmos e Estruturas de Dados I – Ponteiros
Estruturas de Dados em C
Filas.
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
Estruturas de Dados Aula 5: Matrizes 16/03/2015. Matrizes Conjuntos bidimensionais declarados estaticamente float mat[4][3]; acesso de elemento: mat[2][0]
CALCULADORA CARACTERE E VARIÁVEIS COMPOSTAS OU VETORES EM JAVA
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2019
Transcrição da apresentação:

Estrutura de Dados (DPADF 0056) Aula 5 – Estr. Clássicas - Fila Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati –

FIFO - First In First Out

O que define uma fila? Para que um elemento entre na fila ele será sempre colocado em uma extremidade denominada final (término, fim); Para que um elemento seja retirado da fila, ele sairá de uma outra extremidade denominada começo (início, frente);

Estratégia FIFO First in, first out Os elementos da fila são retirados na mesma ordem em que foram introduzidos: o primeiro a entrar é o primeiro a sair; Não são permitidas operações sobre quaisquer nodos, somente sobre aqueles definidos pela organização da fila.

Aplicações de Fila Controle de acesso a recursos compartilhados (fila de impressão, por exemplo)

Política de escalonamento de processos baseada em prioridades; Aplicações de Fila (Cont.) Sistema Operacio nal

Definição das prioridades em uma lista de downloads; Agendamento de tarefas; Troca de mensagens em um sistema distribuído; Leitura do buffer do teclado; Enfileiramento de pacotes no equipamento de rede, antes de submetê-los ao enlace; Etc. Aplicações de Fila (Cont.)

Fila - Implementação Uma fila permite basicamente duas operações: ▫ Enfileirar (inserir um elemento na fila) ▫ Desenfileirar (retirar um elemento da fila) Antes de pensar os algoritmos, precisamos: ▫ Pensar em uma estratégia de armazenamento da estrutura; ▫ Pensar na interface das operações que irão manipular os dados da estrutura;

Organização física Para representar fisicamente uma fila podemos usar diferentes estratégias: ▫ Contiguidade física – com o uso de vetores; ▫ Alocação dinâmica ou encadeamento – com a utilização de ponteiros; Vamos adotar a opção 1 (utilização de vetores) em função da simplicidade dos algoritmos; A organização lógica da fila independe da estratégia de armazenamento.

Etapa 1 – Definição conceitual #define MAX 100 typedef struct fila { int comeco; int final; int vetor[MAX]; } Fila; De que forma posso representar uma fila?

O que podemos fazer com uma fila? Qual é a interface do TAD Fila? Inicialmente precisamos: Criar e inicializar uma fila; Enfileirar (inserir) um elemento; Desenfileirar (retirar) um elemento; Destruir uma fila (liberar a memória ocupada pela mesma); Saber se a fila está vazia; Saber se a fila está cheia; etc...

Etapa 2 – Definição das Operações Fila* criaFila(); void liberaFila(Fila* p); int inserir(Fila* p, int v); int retirar(Fila* p, int* v); int estahVazia(Fila* p); int estahCheia(Fila* p);

Funcionamento Vetor[5]: Insere 12 Insere 40 Insere 30 Retira Insere 20 Retira Insere 10 Insere Erro! Fila cheia começofinal

Fila* criaFila(); Aloca memória para a estrutura física; Inicializa os controles de início e o fim da fila; Retorna um ponteiro para a estrutura criada; void liberaFila(Fila* p); Recebe um ponteiro para uma estrutura do tipo fila e libera a memória ocupada por ela;

int estahVazia(Fila* p); O que caracteriza uma fila vazia? ▫ O início e o fim da fila estão na mesma posição; int estahCheia(Fila* p); O que caracteriza uma fila cheia? ▫ O fim da fila está na última posição!

int inserir(Fila* p, int v); Recebe um ponteiro para uma estrutura do tipo fila e um valor a ser enfileirado; Verifica se a fila já não está cheia; Se não está, então... ▫ Coloca o elemento na posição indicada pelo fim ▫ Incrementa o valor do fim; A função inserir() retorna 1 (um) se o valor foi enfileirado ou então retorna 0 (zero) se não foi possível enfileirar;

int retirar(Fila* p, int* v); Recebe um ponteiro para uma estrutura do tipo fila e um ponteiro para uma variável inteira; Verifica se a fila já não está vazia; Se não está, então... ▫ Retira o elemento da posição indicada pelo início; ▫ Incrementa o valor do início; A função retirar() retorna 1 (um) se o valor foi retirado da fila ou então retorna 0 (zero) se não foi possível retirá-lo;

Etapa 3 – Implementação e Utilização a = criaFila(); inserir(a,10); inserir(a,20); inserir(a,30); int x; retirar(a, &x); printf("Elemento '%d' retirado",x); liberaFila(a);

Exercícios para fixação

Labirinto de ouro Dado um labirinto representado por uma matriz NxN, contendo -1 em posições onde há um obstáculo, 1 nas posições onde há ouro e 0 nas posições livres. Escreva um programa para percorrer o labirinto e determinar quanto ouro existe no mesmo. Coloca na fila a posição inicial (x,y) Enquanto a fila não está vazia Remove a posição do início da fila Para cada posição vizinha que é acessível e que não foi visitada, coloque na fila e marque como visitada.

“Dobrar” o vetor de forma que as suas extremidades se encontrem

Fila circular Observe a seguinte situação (considerando uma fila normal, de tamanho N implementada sobre um vetor): ▫ São inseridos N elementos na fila; ▫ Em seguida são retirados n-2 elementos; ▫ Tenta-se incluir mais um elemento; ▫ O que acontece?  A fila acusará fila cheia! Mas há espaço no vetor!  Isso é um problema da regra que define a fila? Não!  O problema decorre da forma utilizada para representar a fila: o VETOR;

Fila circular (cont.) Se modificarmos a organização física da fila e a implementação de suas operações o problema pode ser resolvido. Vamos imaginar um “vetor dobrado” de forma que o fim do vetor se encontre com o início

Fila circular (cont.) Antes de mais nada, uma fila circular é uma fila e portanto suas operações acontecem da seguinte forma: ▫ Inclusões: no final da fila; ▫ Retiradas: no início da fila; A diferença está na forma de tratar a organização física da fila. A interface é a mesma da fila tradicional.

Definição conceitual #define MAX 100 typedef struct fila { int comeco; int final; int tamanho; int vetor[MAX]; } Fila; Precisamos controlar o tamanho da fila de outra forma!

Funcionamento Precisamos garantir que os indicadores de posicionamento da fila circular (começo e final) retornem ao início sempre que atingirem o valor limite do tamanho do vetor; Algo como: variavel = variavel + 1 se variavel > MAX então variavel = 0

Funcionamento (cont.) As condições “fila cheia” e “fila vazia” também devem ser alteradas: Uma fila está cheia se o campo que foi adicionado par controlar o tamanho for igual ao tamanho do vetor; Uma fila está vazia se o tamanho for igual a zero;

Exercícios para fixação

Fila circular Modifique a implementação das operações e da estrutura utilizada para representar uma fila utilizando uma organização circular (conforme os conceitos discutidos até então);