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

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

Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita

Apresentações semelhantes


Apresentação em tema: "Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita"— Transcrição da apresentação:

1 Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Entrada restrita Saída restrita

2 Fila versus Pilha SAÍDA SAÍDA ENTRADA FIM Elemento 3 TOPO Elemento 2
BASE INÍCIO ENTRADA

3 Filas Operações primitivas que manipulam as filas:
InicializaFila ou Construtor faz a fila q ficar vazia FilaVazia ou Empty retorna Verdadeiro se a fila q está vazia FilaCheia ou Full retorna Verdadeiro se a fila q está cheia InsereFila(x) ou Insert(x) insere o elemento x no final da fila RemoveFila ou Remove remove o PRIMEIRO elemento da fila, retornando o conteúdo do elemento como valor da função

4 Filas REPRESENTANDO FILAS EM O.O. Pode utilizar um vetor
Apoio de duas variáveis: front e rear Front: primeiro elemento da fila Rear: último elementos da fila class Queue { private object [] elements = new object[1000]; private int front, rear; ... }

5 Filas Ignorando, momentaneamente, a possibilidade de overflow e underflow: Operação Insert (x): elements [++ rear] = x; Operação Remove (q): x= elements [front ++]; No momento que a fila é criada, rear é definido como –1 e front como 0 A fila está vazia sempre que rear < front Número de elementos na fila é sempre igual ao valor de rear – front + 1

6 Filas Problema clássico da fila vazia sem possibilidade de inserir novos elementos: itens 4 E rear =4 3 D 2 C rear=2 front= front =2 1 B front = 0 rear = -1 A front=0

7 Filas Solução 1: remanejar todos os elementos quando remover um elemento public int Remove () { x = elements [ 0 ]; for (int i = 0; i < rear; i++) elements[ i ] = elements[ i + 1 ]; rear - -; O campo front não é necessário porque o elemento na posição 0 do vetor está sempre no início da fila. A fila vazia é representada por rear igual a –1 Podemos verificar que pode existir um grande esforço computacional para a movimentação de 500, 1000, , elementos Esta solução sugerida parece ser bastante ineficiente

8 Filas Circulares Solução mais elegante para resolver problema das filas A idéia é armazenar os elementos na fila como um círculo. Primeiro elemento do vetor vem logo depois do último. Se o último elemento estiver ocupado, um novo valor pode ser inserido no primeiro elemento do vetor Elemento novo não será incluído numa fila circular somente se não houver de fato espaço na mesma.

9 Filas Circulares elements 4 E rear=4 front=4 3 D 2 C front=2 1 rear=0 G rear=1 rear= 1 F rear =0 front=0 No momento (d), rear < front (1 < 4), é verdadeira – fila vazia? Solução: utilizar um contador com o número de elementos.

10 Filas Circulares Implementação dessa solução – atributos da classe:
class Queue { private object [] elements; private int front, rear, size, count; // Métodos ... }

11 Filas Circulares Implementação dessa solução – construtor:
public Queue (int Size) { size = Size; elements = new object[size]; front = 0; rear = front; count = 0; }

12 Filas Circulares Implementação dessa solução – retirar elementos:
public object Remove () { if (Empty ()) { throw new Exception(“Fila vazia!”); } if (front == size – 1) front = 0; else front++; count --; return (elements[front]); }

13 Filas Circulares Implementação dessa solução – inserir elementos:
public void Insert (object x) { if (Full()) throw new Exception (“Pilha Cheia!”); } if (rear == size – 1) rear = 0; else rear ++; elements[rear] = x; count ++;


Carregar ppt "Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita"

Apresentações semelhantes


Anúncios Google