Projetos

Propaganda
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.
18
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.
19
Download