Top Banner
Aula 12 Fila Dinâmica prof Leticia Winkler 1
13

Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Jun 25, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Aula 12

Fila Dinâmica

prof Leticia Winkler

1

Page 2: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Fila Dinâmica (Dynamic Queue) Fila implementada através de uma lista linear encadeada.

É uma lista linear encadeada em que a operação de inserção de um elemento (enfileirar) é realizada numa extremidade da lista enquanto a de retirada de um elemento (desenfileirar) é realizada na outra extremidade da lista.

Para facilitar as operações de enfileirar e desenfileirar utiliza-se doi ponteiros um para o primeiro elemento (inicio da fila) e outra para o último elemento (fim da fila)

Prof. Leticia Winkler 2

inicio fim

Page 3: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Operações com uma Fila Dinâmica Criar a fila

Declarar os ponteiros para o inicio e fim da fila

Inicializar a fila

Determinar o status inicial da fila, a fim de prepará-la para a inserção de dados.

Ponteiros para o inicio e para o fim da fila são NULL – apontam para nada

Enfileirar

consiste em inserir um valor no fim da fila.

Verificar se a fila está vazia

Caracterizada pelo ponteiro para inicio estar com NULL.

Desenfileirar

Consiste em retirar um valor do inicio da fila. É preciso verificar previamente se a fila está vazia.

Percorrer

Mostrar a fila

Prof. Leticia Winkler 3

Page 4: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Observações sobre Fila Dinâmica Na fila dinâmica não há necessidade de verificar se a fila

está cheia, pois o limite na inserção de dados, está na capacidade do computador

Uma das vantagens da fila dinâmica sobre a estática (sequencial - implementada com vetor) é não ter limite de sua capacidade. Outra vantagem: como os nós são alocados a medida que são necessários, a fila dinâmica só usa o espaço realmente necessário.

As operações em um fila estática ~tem código mais simples.

As aplicações para a fila dinâmica são as mesmas da fila estática.

Prof. Leticia Winkler 4

Page 5: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Criar a fila Supondo a descrição de um nó:

struct no {

int dado;

struct no *prox;

};

Criar a fila é declarar os ponteiros para o inicio e para o fim da fila:

no *inicio, *fim;

Prof. Leticia Winkler 5

Page 6: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Inicializar a Fila Determina o status inicial da fila, a fim de prepará-la

para a inserção de dados.

Inicialmente o ponteiro para o inicio não aponta para nada, assim como o ponteiro para o fim:

inicio = fim = NULL;

Prof. Leticia Winkler 6

inicio fim

Page 7: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Enfileirar (Enqueue) Consiste em inserir um valor no fim da fila.

Cria-se um novo nó:

Novo nó será apontado pelo último nó da fila

Se novo nó é o primeiro a ser inserido, inicio também irá apontar para novo nó

Prof. Leticia Winkler

inicio fim

fim inicio

inicio fim

Page 8: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Enfileirar (Enqueue) Enfileirando mais um nó.

Cria-se um novo nó:

Novo nó será apontado pelo último nó da fila

Ajusta-se o fim

Prof. Leticia Winkler

inicio fim

inicio fim

inicio fim

Page 9: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Código para enfileirar void enfileirar(int valor) {

// cria um novo no

no *novo = new no;

novo->dado = valor;

novo->prox = NULL;

if (inicio == NULL) { // se lista está vazia

inicio = novo; // novo no será o primeiro elemento da lista

}

else { // se lista não estiver vazia

// ultimo nó aponta para novo nó

fim->prox = novo;

}

fim = novo; // fim indica um novo nó

} Prof. Leticia Winkler 9

Page 10: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Verificar se a fila está Vazia A fila estará vazia, quando o ponteiro para o início

estiver apontando para nada (estiver aterrado)

Prof. Leticia Winkler 10

inicio

Page 11: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Código para Verificar se a fila está Vazia if (inicio== NULL) {

cout << "\n\nFila vazia!!!\n\n";

}

Ou usando uma função:

bool estaVazia() {

return (inicio == NULL);

}

Prof. Leticia Winkler 11

Page 12: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Percorrer - Mostrar a Fila Deve-se verificar se exeistem elementos na fila (ou seja, se a

fila não está vazia)

Utiliza-se uma ponteiro auxiliar (aqui chamado de atual) que irá percorrer a fila

O ponteiro atual é inicializado com o valor do ponteiro inicio

atual percorre a fila até o fim

Prof. Leticia Winkler 12

15 12 20 35

início

atual

fim

Page 13: Aula 12 Fila Dinâmica prof Leticia Winklerrogerio/ed/12 - Fila Dinamica.pdf · Operações com uma Fila Dinâmica Criar a fila Declarar os ponteiros para o inicio e fim da fila Inicializar

Código para Percorrer void percorrer () { no *atual; // ponteiro para percorrer a fila atual = inicio; cout << "\nFila=> "; while (atual != NULL) { cout << atual->dado << "\t"; atual = atual->prox; } cout << endl; }

Prof. Leticia Winkler 13