A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Filas circulares.

Apresentações semelhantes


Apresentação em tema: "Filas circulares."— Transcrição da apresentação:

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.


Carregar ppt "Filas circulares."

Apresentações semelhantes


Anúncios Google