Filas David Menotti Estruturas de Dados I DECOM – UFOP.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
O TAD fila O TAD fila armazena objetos arbitrários
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Programação Avançada I
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Programação II Estruturas de Dados
ESTRUTURAS DO TIPO FILA
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Pesquisa em Memória Primária – Árvores de Busca
Aula T11 – BCC202 Pilhas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
Pilha David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Aula T12 – BCC202 Listas Túlio Toffolo
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AED – Algoritmos e Estruturas de Dados
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.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Slides: Prof. João Fabro UTFPR - Curitiba
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
Algoritmos e Estruturas de Dados
ALGORITMOS E ESTRUTURAS DE DADOS
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
LISTAS DUPLAMENTE ENCADEADAS
Pesquisa em Memória Primária
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Árvores Binárias de Pesquisa
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados Aula 9: Listas (parte 1)
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
Estrutura de dados Pilhas e filas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
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.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Filas David Menotti Estruturas de Dados I DECOM – UFOP

© David Menotti Estruturas de Dados I O que é uma fila? Fila 1432

© David Menotti Estruturas de Dados I O que é uma fila? Fila 1432

© David Menotti Estruturas de Dados I O que é uma fila? Fila 1 432

© David Menotti Estruturas de Dados I O que é uma fila? Fila

© David Menotti Estruturas de Dados I O que é uma fila? Fila

© David Menotti Estruturas de Dados I TAD Fila Tipo Abstrato de dados com a seguinte característica: O primeiro elemento a ser inserido é o primeiro a ser retirado/ removido (FIFO – First in First Out) Analogia: fila bancária, fila do cinema. Usos: Sistemas operacionais: fila de impressão, processamento

© David Menotti Estruturas de Dados I TAD Fila Operações: 1. FFVazia(Fila). Faz a fila ficar vazia. 2. FEnfileira(Fila, x). Insere o item x no final da fila. 3. FDesenfileira(Fila, x). Retorna o item x no início da fila, retirando-o da fila. 4. FEhVazia(Fila). Esta função retorna true se a fila está vazia; senão retorna false.

© David Menotti Estruturas de Dados I Implementação de Filas através de Arranjos Os itens são armazenados em posições contíguas de memória. A operação Enfileira faz a parte de trás da fila expandir-se. A operação Desenfileira faz a parte da frente da fila contrair-se. A fila tende a caminhar pela memória do computador, ocupando espaço na parte de trás e descartando espaço na parte da frente.

© David Menotti Estruturas de Dados I Implementação de Filas através de Arranjos Com poucas inserções e retiradas, a fila vai ao encontro do limite do espaço da memória alocado para ela. Solução: imaginar o array como um círculo. A primeira posição segue a última.

© David Menotti Estruturas de Dados I Implementação de Filas através de Arranjos A fila se encontra em posições contíguas de memória, em alguma posição do círculo, delimitada pelos apontadores Frente e Trás. (Frente indica a posição do primeiro elemento, trás a primeira posição vazia) Para enfileirar, basta mover o apontador Trás uma posição no sentido horário. Para desenfileirar, basta mover o apontador Frente uma posição no sentido horário.

© David Menotti Estruturas de Dados I Estrutura da Fila usando Arranjo #define MaxTam 1000 typedef int Apontador; typedef int TChave; typedef struct { TChave Chave; /* outros componentes */ } TItem; typedef struct { TItem vItem[MaxTam+1]; Apontador iFrente, iTras; } TFila;

© David Menotti Estruturas de Dados I Operações sobre Filas usando Posições Contínuas de Memória Nos casos de fila cheia e fila vazia, os apontadores Frente e Trás apontam para a mesma posição do círculo. Uma saída para distinguir as duas situações é deixar uma posição vazia no array. Neste caso, a fila está cheia quando Trás+1 for igual a Frente. void FFVazia(TFila* pFila) { pFila->iFrente = 0; pFila->iTras = pFila->iFrente; } /* FFVazia */ int FEhVazia(TFila* pFila) { return (pFila->iFrente == pFila->iTras); } /* FEhVazia */

© David Menotti Estruturas de Dados I Operações sobre Filas usando Posições Contínuas de Memória int FEnfileira(TFila* pFila, TItem* pItem) { if (((pFila->iTras+1)%(MaxTam+1)) == pFila->iFrente) return 0; /* fila cheia */ pFila->vItem[pFila->iTras] = *pItem; pFila->iTras = (pFila->iTras + 1) % (MaxTam+1); /* if (pFila->iTras == MaxTam) pFila->iTras = 0; else pFila->iTras++; */ return 1; } /* FEnfileira */

© David Menotti Estruturas de Dados I Operações sobre Filas usando Posições Contínuas de Memória int FDesenfileira(TFila* pFila, TItem* pItem) { if (FEhVazia(pFila)) return 0; *pItem = pFila->vItem[pFila->iFrente]; pFila->iFrente = (pFila->iFrente + 1) % (MaxTam+1); /* if (pFila->iFrente == MaxTam) pFila->iFrente = 0; else pFila->iFrente++; */ return 1; } /* FDesenfileira */

© David Menotti Estruturas de Dados I Implementação de Filas usando Apontadores Há uma célula cabeça para facilitar a implementação das operações Enfileira e Desenfileira quando a fila está vazia. Quando a fila está vazia, os apontadores Frente e Trás apontam para a célula cabeça. Para enfileirar um novo item, basta criar uma célula nova, ligá-la após a célula que contém xn e colocar nela o novo item. Para desenfileirar o item x1, basta desligar a célula cabeça da lista e a célula que contém x1 passa a ser a célula cabeça.

© David Menotti Estruturas de Dados I Estrutura da Fila usando Apontadores A fila é implementada por meio de células Cada célula contém um item da fila e um apontador para outra célula. A estrutura TipoFila contém um apontador para a frente da fila (célula cabeça) e um apontador para a parte de trás da fila.

© David Menotti Estruturas de Dados I Estrutura da Fila usando Apontadores typedef int TChave; typedef struct TItem { TChave Chave; /* outros componentes */ } TItem; typedef struct Celula* Apontador; typedef struct Celula { TItem Item; struct Celula* pProx; } TCelula; typedef struct TFila { Apontador pFrente; Apontador pTras; } TFila;

© David Menotti Estruturas de Dados I Operações sobre Filas usando Apontadores (com cabeça) void FFVazia(TFila* pFila) { pFila->pFrente = (Apontador)malloc(sizeof(TCelula)); pFila->pTras = pFila->pFrente; pFila->pFrente->pProx = NULL; } /* FFVazia */ int FEhVazia(TFila* pFila) { return (pFila->pFrente == pFila->pTras); } /* FEhVazia */

© David Menotti Estruturas de Dados I Operações sobre Filas usando Apontadores (sem cabeça) void FFVazia(TFila* pFila) { pFila->pFrente = NULL; pFila->pTras = pFila->pFrente; } /* FFVazia */ int FEhVazia(TFila* pFila) { return (pFila->pFrente == NULL); /* pFila->pTras == NULL */ } /* FEhVazia */

© David Menotti Estruturas de Dados I Operações sobre Filas usando Apontadores (com cabeça) int FEnfileira(TFila *pFila, TItem* pItem) { Apontador pNovo; pNovo = (Apontador)malloc(sizeof(TCelula)); if (pNovo == NULL) return 0; pFila->pTras->pProx = pNovo; pFila->pTras = pNovo; pNovo->Item = *pItem; pNovo->pProx = NULL; return 1; } /* FEnfileira */

© David Menotti Estruturas de Dados I Operações sobre Filas usando Apontadores (sem cabeça) int FEnfileira(TFila *pFila, TItem* pItem) { Apontador pNovo; pNovo = (Apontador)malloc(sizeof(TCelula)); if (pNovo == NULL) return 0; pNovo->pProx = NULL; if (pFila->pTras != NULL) pFila->pTras->pProx = pNovo; pFila->pTras = pNovo; pNovo->Item = *pItem; if (pFila->pFrente == NULL) pFila->pFrente = pNovo; return 1; } /* FEnfileira */

© David Menotti Estruturas de Dados I Operações sobre Filas usando Apontadores (com cabeça) int FDesenfileira(TFila* pFila, TItem* pItem) { Apontador pAux; if (FEhVazia(pFila)) return 0; pAux = pFila->pFrente; pFila->pFrente = pFila->pFrente->pProx; *pItem = pFila->pFrente->Item; free(pAux); return 1; } /* FDesenfileira */

© David Menotti Estruturas de Dados I Operações sobre Filas usando Apontadores (sem cabeça) int FDesenfileira(TFila* pFila, TItem* pItem) { Apontador pVelho; if (FEhVazia(pFila)) return 0; pVelho = pFila->pFrente; pFila->pFrente = pFila->pFrente->pProx; *pItem = pVelho->Item; free(pVelho); if (pFila->pFrente == NULL) pFila->pTras = NULL; return 1; } /* FDesenfileira */