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

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

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

Apresentações semelhantes


Apresentação em tema: "Filas circulares. 2 Sumário Condições de Contorno Implementação Java Implementação C++ 2."— Transcrição da apresentação:

1 Filas circulares

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

3 Condições de Contorno

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

5 Implementação Java

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

7 77 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; }

8 88 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; } //... }

9 99 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]; }

10 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; } //... }

11 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 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++ E. Horowitz, S. Sahni, and S. Rajasekaran. W. H. Freeman Press, 1997

15 15 Declaração da Classe Fila Circular #define NULL 0 #include template 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 16 Método enqueue em filas circulares template bool Queue ::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 17 Método dequeue em filas circulares template bool Queue ::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 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 19 Explicação de Const (2) Havia sido declarado ListElement 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. 2 Sumário Condições de Contorno Implementação Java Implementação C++ 2."

Apresentações semelhantes


Anúncios Google