Filas circulares.

Slides:



Advertisements
Apresentações semelhantes
Introdução à Programação: uma Abordagem Funcional Programação I Eng. de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi 2010/1.
Advertisements

TADs Vector, Lista e Sequência
Programação Orientada a Objetos*
Classes C++ Class nome da classe { private: membros privados
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Algoritmos de Ordenação
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
1. Classes 2. Membros estáticos 1.1. Palavra chave this
Struct slink { slink* next; slink() { next=0; } slink(slink* p) { next=p; } virtual void print_me() = 0; }; next função virtual pura 1º constructor 2º
TAD Deque ATAI.
ADT – Arvore Binária de Pesquisa
1 Java: Tratamento de Exceções Alcides Calsavara.
Percurso não recursivo e impressão em árvores binárias Drozdek.
Pilhas e Filas.
Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar.
Árvores B Implementação pelos FrameWork Bruno Preiss.
Estruturas Fundamentais
Listas Ordenadas e Listas Classificadas. 2 Sumário Fundamentos Listas Ordenadas Listas Classificadas.
Árvores.
Árvores de Busca. 2 Uma árvore que suporta eficientes operações de busca, inclusão e exclusão é chamada de árvore de busca. A árvore é usada para armazenar.
Listas Encadeadas Circulares Listas Duplamente Encadeadas
Listas Encadeadas Circulares Listas Duplamente Encadeadas
INF Computação Gráfica
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Listas Ligadas – Conceitos Avançados
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
A.4. Trabalhando com elementos de biblioteca STL – Standard Template Libraby Disponibiliza um conjunto de classes templates, provendo algoritmos eficientes.
7 Abstração Genérica Unidades genéricas e instanciação.
Integração entre objetos
LISTAS “LINKADAS” No Mapeamento Seqüencial tem-se o problema de
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
Aula 8 Polimorfismo.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Aula 2 Listas e iteradores.
A linguagem C#.
Programação Orientada a Objetos com Java
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Const member functions
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
Uma classe para vectores
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Análise Sintática – Parte 1
Tipos Abstratos de Dados
Capítulo 2. Generics  Novo recurso de linguagem surgida a partir da versão 5  Permite a utilização de tipos parametrizados por classes e métodos tornando-os.
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
1.
Orientação a Objetos e Java Graduação em Ciência da Computação
Java Generics Adeline de Sousa Silva.
Tipos Especiais de Listas
Pilhas Profa. Nádia Félix.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Listas Simplesmente Encadeadas
Tipos Especiais de Listas
Tratamento de Exceções
Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo.
2002/2003 Programação Orientada para Objectos 1 Aula 2 Noção de lista e de iterador Operações com listas e iteradores Classes embutidas.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
JAVA – Fila ATAI.
Aprendendo como funciona o NHibernate Elvis Medeiros Programador .NET
Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Transcrição da apresentação:

Filas circulares

Sumário Condições de Contorno Implementação Java Implementação C++ 2

Condições de Contorno

Condições de contorno Condição inicial head = tail = array.length -1 Fila vazia head = tail Fila cheia head = = (tail + 1) mod array.length 4

Implementação Java

Definição da Classe QueueAsArray // pgm06_14.java public class QueueAsArray extends AbstractContainer implements Queue { protected Object[] array; protected int head; protected int tail; // ... } 6

Métodos construtor e purge da Classe QueueAsArray (1) // pgm06_15.java public class QueueAsArray extends AbstractContainer implements Queue { protected Object[] array; protected int head; protected int tail; public QueueAsArray (int size) array = new Object [size]; head = 0; tail = size - 1; } 7

Métodos construtor e purge da Classe QueueAsArray (2) // pgm06_15.java (Continuação) public void purge () { while (count > 0) array [head] = null; if (++head == array.length) head = 0; --count; } // ... 8

Método getHead da Classe QueueAsArray // pgm06_16.java public class QueueAsArray extends AbstractContainer implements Queue { protected Object[] array; protected int head; protected int tail; public Object getHead () if(count == 0) throw new ContainerEmptyException (); return array [head]; } 9

Métodos enqueue e dequeue da Classe QueueAsArray public void enqueue (Object object) { if(count == array.length) throw new ContainerFullException (); if(++tail == array.length) tail = 0; array [tail] = object; ++count; } public Object dequeue () { if(count == 0) throw new ContainerEmptyException (); Object result = array [head]; array [head] = null; if(++head == array.length) head = 0; --count; return result; } // ... 10

Método enqueue em filas circulares public void enqueue (Object object) { if(++tail == head) throw new ContainerFullException (); if(tail == array.length) tail = 0; array [tail] = object; ++count; } 11

Método dequeue em filas circulares public Object dequeue () { if(head == tail) throw new ContainerEmptyException (); if(++head == array.length) head = 0; --count; Object result = array [head]; array [head] = null; return result; } 12

Implementação C++

COMPUTER ALGORITHMS/C++ http://www.cis.ufl.edu/~raj/BOOK.html E. Horowitz, S. Sahni, and S. Rajasekaran. W. H. Freeman Press, 1997

Declaração da Classe Fila Circular #define NULL 0 #include<iostream.h> template <class T> class Queue { private: T* q; int front, rear, MaxSize; public: Queue(int MSize): MaxSize(MSize) { q = new T[MaxSize]; rear=front=0; } ~Queue() { delete [] q; } bool AddQ(T item); bool DeleteQ(T& item); bool QFull(); bool QEmpty(); }; 15

Método enqueue em filas circulares template <class T> bool Queue<T>::AddQ(T item) // Insert item in the circular queue stored in q[MaxSize]. // rear points to the last item and front is one // position counterclockwise from the first item in q. { rear = (++rear) % MaxSize; // Advance rear clockwise. if (front == rear) { cout << "Queue is full" << endl; if (!front) rear = MaxSize-1; else rear--; // Move rear one position counterclockwise. return false; } else { q[rear] = item; // Insert new item. return true; 16

Método dequeue em filas circulares template <class T> bool Queue<T>::DeleteQ(T& item) // Removes and returns the front element // of the queue q[MaxSize]. { if (front == rear) { cout << "Queue is empty" << endl; return false; } else { front=(++front)%MaxSize; // Advance front clockwise. item = q[front]; // Return front of queue. return true; 17

Explicação de Const (1) const DataArea * Constante2 Declara que Constante2 é uma variável ponteiro para uma DataArea constante DataArea const * Constante2 É uma sintaxe alternativa com o mesmo significado DataArea * const Constante3 declara que Constante3 é uma variável ponteiro constante para uma variável DataArea DataArea const * const Constante4 Declara que Constante4 é um ponteiro constante para uma DataArea constante. Const se aplica a tudo que estiver à sua esquerda imediata. Se não houver nada à sua esquerda const se aplica a tudo que estiver à sua direita imediata.

ListElement<Object*> const* ptr; Explicação de Const (2) Havia sido declarado ListElement<Object*> const* ptr; Significa que o ListElement cujo Datum é um Object* é constante Não se pode apagar o ListElement mas o seu Datum sim.