Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Filas circulares
2
Sumário Condições de Contorno Implementação Java Implementação C++ 2
3
Condições de Contorno
4
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
5
Implementação Java
6
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
7
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
8
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
9
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
10
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
11
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
12
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
13
Implementação C++
14
COMPUTER ALGORITHMS/C++ http://www.cis.ufl.edu/~raj/BOOK.html
E. Horowitz, S. Sahni, and S. Rajasekaran. W. H. Freeman Press, 1997
15
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
16
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
17
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
18
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.
19
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.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.