Marco Antonio Montebello Júnior

Slides:



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

Marco Antonio Montebello Júnior
Marco Antonio Montebello Júnior
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,
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Listas duplamente encadeadas
Programação II Estruturas de Dados
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
David Menotti 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
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Aula T12 – BCC202 Listas Túlio Toffolo
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas Ligadas – Conceitos Avançados
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.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 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
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
Listas Lineares Estrutura de Dados.
Algoritmos e Estruturas de Dados
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
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
Filas - Definição Uma fila possui o comportamento: O primeiro que chega é o primeiro que sai. O único elemento que pode ser removido da fila é o primeiro.
1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Lista Encadeada Circular Lista Duplamente Encadeada
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)
Lista encadeada Representar um grupo de dados.
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
Estruturas de Dados Aula 15: Árvores
Prof. Alessandro Gonçalves
Lista Linear Base para outras estruturas
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
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.
UNIVERSIDADE FEDERAL DO AMAZONAS- UFAM INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA- ICET SISTEMAS DE INFORMAÇÃO ALGORITMOS E ESTRUTURAS DE DADOS II PILHAS.
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
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.
Filas Prof. Kariston Pereira
Transcrição da apresentação:

Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Filas Estrutura de Dados Marco Antonio Montebello Júnior marco.antonio@aes.edu.br

Listas Lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita Entrada restrita Saída restrita Estrutura de Dados

Fila versus Pilha SAÍDA SAÍDA ENTRADA FIM Elemento 2 TOPO Elemento 2 BASE INÍCIO ENTRADA Estrutura de Dados

Filas Operações primitivas que manipulam as filas: InicializaFila (q) ou init(q) Faz a fila q ficar vazia FilaVazia(q) ou empty(q) Retorna V se a fila q está vazia FilaCheia(q) ou full(q) Retorna V se a fila q está cheia InsereFila(q,x) ou insert(q,x) Insere o elemento x no final da fila q RemoveFila(q) ou remove(q) Remove o PRIMEIRO elemento da fila, retornando o conteúdo do elemento como valor da função Estrutura de Dados

Filas Representando filas em Linguagem C: Podemos utilizar vetor Apoio de 2 variáveis: inic e fim inic – Primeiro elemento da fila fim – Último elemento da fila #define MAXQUEUE 100 struct queue { int item[MAXQUEUE]; int inic, fim; }; struct queue q; Estrutura de Dados

Filas Ignorando momentaneamente a possibilidade de overflow e underflow: Operação InsereFila(q, x): q.item [++ q.fim] = x Operação RemoveFila(q): x = q.item [q.inic ++]; No momento que a fila é criada, q.fim é definido como –1 e q.inic como 0 A fila está vazia sempre que q.fim < q.inic Número de elementos na fila é sempre igual ao valor de q.fim - q.inic + 1 Estrutura de Dados

Filas – Problema Clássico Problema clássico da fila vazia sem possibilidade de inserir novos elementos: q.item 4 E q.fim =4 3 D 2 C q.fim=2 q.inic= q.inic =2 1 B q.inic = 0 q.fim = -1 A q.inic=0 Estrutura de Dados

Filas – Solução 1 Remanejar todos os elementos quando remover um elemento: RemoveFila(q); x = q.item [ 0 ]; for (i = 0; i < q.fim; i++) q.item[ i ] = q.item[ i + 1 ]; q.fim --; O campo q.inic não é necessário porque o elemento na posição 0 do vetor está sempre no início da fila. A fila vazia é representada por q.fim igual a –1 Podemos verificar que pode existir um grande esforço computacional para a movimentação de 500, 1000, 10.000, 1.000.000 elementos Esta solução escolhida parece ser bastante ineficiente Estrutura de Dados

Filas Circulares Solução mais elegante para resolver problema das filas. A idéia é armazenar os elementos na fila como um círculo. Primeiro elemento do vetor vem logo depois do último. Se o último elemento estiver ocupado, um novo valor pode ser inserido no primeiro elemento do vetor. Elemento novo não será incluído numa fila circular somente se não houver de fato espaço na mesma. Estrutura de Dados

Filas Circulares q.item q.Item 4 E q.fim=4 q.inic=4 3 D 2 C f.inic=2 q.inic=2 1 q.fim=0 G q.fim=1 F q.inic=0 No momento (4), q.fim < q.inic (1 < 4), é verdadeira – fila vazia? Solução: q.inic deve apontar para o elemento anterior ao primeiro. Assim, a condição para a fila estar vazia passa a ser q.fim = q.inic Estrutura de Dados

Filas Circulares Declaração da Fila #define MAXQUEUE 100 struct queue { int item [MAXQUEUE]; int inic, fim; }; struct queue q; Estrutura de Dados

Filas Circulares Inicialização da Fila void InicializaFila(struct queue *pq) { pqinic = MAXQUEUE – 1; pqfim = MAXQUEUE – 1; } Estrutura de Dados

Filas Circulares Fila Vazia int FilaVazia(struct queue *pq) { if(pqinic == pqfim) return(1); //Verdadeiro(V) else return(0); //False(F) } Estrutura de Dados

Filas Circulares Retirar Elementos int RemoveFila (struct queue *pq) { if(FilaVazia(pq)) printf(“Underflow na fila!\n”); exit(1); } if(pqinic == MAXQUEUE – 1) pqinic = 0; else (pqinic)++; return(pqitems[pqinic]); Estrutura de Dados

Filas Circulares Inserir Elementos Problema para testar se a fila está cheia. Solução: sacrificar um elemento da fila. Se o vetor da fila tiver 100 elementos, poderá armazenar 99 elementos A tentativa de inserir o centésimo elemento irá gerar o estouro da fila Estrutura de Dados

Filas Circulares Inserir Elementos void InsereFila(struct queue *pq, int x) { if(pqfim == MAXQUEUE – 1) pqfim = 0; else (pqfim )++; //Verifica ocorrência de estouro if(pqfim == pqinic) printf(“Ocorreu overflow na fila!\n”); exit(1); } pqitems[pqfim] = x; return; Estrutura de Dados

Filas Circulares Inserir Elementos q.item 4 E q.fim=4 3 D 2 C 1 q.inic=1 G q.Inic = q.fim = 1 F q.fim=0 Estrutura de Dados

InsereFila versus RemoveFila Teste de overflow em InsereFila(): Ocorre somente depois que pqfim é incrementado em uma unidade 1o. Incrementa depois verifica Teste de underflow em RemoveFila(): Ocorre assim que a rotina é chamada, só então pqinic é incrementado em uma unidade 1o. Verifica depois incrementa Estrutura de Dados