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

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

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

Apresentações semelhantes


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

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

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

3 Filas Operações primitivas que manipulam as filas: InicializaFila ou Construtorfaz a fila q ficar vazia FilaVazia ou Emptyretorna Verdadeiro se a fila q está vazia FilaCheia ou Fullretorna Verdadeiro se a fila q está cheia InsereFila(x) ou Insert(x)insere o elemento x no final da fila RemoveFila ou Removeremove 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 4Erear =4 3D 2Crear=2Cfront= rear=2 Cfront =2 1B 0front = 0 rear = -1 Afront=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 No momento (d), rear < front (1 < 4), é verdadeira – fila vazia? Solução: utilizar um contador com o número de elementos. elements 4 E rear=4 E E front=4 E 3 D D 2 C front=2 C 1 rear=0 G rear=1 G 0 F F rear=0 F F front=0

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 Pilha Fila Fila Dupla Entrada restrita Saída restrita."

Apresentações semelhantes


Anúncios Google