Mod07_Estruturas de Dados.ppt

73
 Algoritmos e Estrutu ras de Dados Módulo 7 Estruturas de Dados Prof. Alexandre Siqueira Dias [email protected]

Transcript of Mod07_Estruturas de Dados.ppt

  • Algoritmos e Estruturas de Dados

    Mdulo 7Estruturas de Dados

    Prof. Alexandre Siqueira [email protected]

  • Tipos de DadosConjunto de valores possveis que cada varivel pode possuirNUMRICOINTEIRO Ex.: -23, 98, 0, 560REALEx.: 23,45; -364,89; 0,0 LGICO (BOOLEANO)VERDADEIRO/FALSO

  • Tipos de DadosLITERAL OU CARACTERELetras (maisculas e minsculas)NmerosCaracteres especiais (&, #, @, ?, + etc.)Ex.: 'aluno', '1234', '@ internet'

  • Novos Tipos de DadosNem sempre os tipos bsicos (inteiro, real, caractere e lgico) so suficientes para exprimir estruturas de dados em algoritmos. Necessidade de novos tipos de dados serem criadosHomogneosVetoresMatrizesHeterogneosRegistros

  • RegistroO registro um conjunto de dados logicamente relacionadosUtiliza vrios dados de tipos diferentes em uma mesma estrutura Por isso considerado heterogneo.Cada elemento (campo) pode ser referenciado de forma nica pelo seu nome

  • Registro em C/C++struct{ tipo_dados campo1,tipo_dados campo2 } variavel_struct;

    ou

    struct nome_struct{ tipo_dados campo1,tipo_dados campo2 };

  • Registro em C/C++Ex.:struct { int dia; int mes; int ano; } d; Declara um registro d que possui os campos dia, mes e ano.

    struct data { int dia; int mes; int ano; }; Declara um tipo de registro chamado data que possui os campos dia, mes e ano.

    Sintaxe C struct data x; /* declara um registro x do tipo data */ struct data y; /* declara um registro y do tipo data */

    ouSintax C++data x; /* declara um registro x do tipo data */ data y; /* declara um registro y do tipo data */

  • Tipo Abstrato de Dados - TADEspecifica um conjunto de dados e as operaes que podem ser executadas sobre esses dadosExemplo:estrutura Estudante{ Nome Idade Matricula } funcao Estudante_MaiorDeIdade(Estudante estudante) retorna booleano; funcao Estudante_ValidaMatricula(Estudante estudante) retorna booleano;

  • Estruturas de DadosA qualidade da soluo de um problema depende, dentre outros fatores, da forma como os dados relevantes esto organizadosEncontrar o nmero do telefone de um certo cliente no conjunto de todos os clientes.Representao interna de uma string

  • Estruturas de DadosEstruturas de dados so formas genricas de se estruturar informao de modo a serem registradas e processadas pelo computadorEx.:lista ordenada;vetores;rvores;grafos etc.Estas s adquirem significado quando associadas a um conjunto de operaes, que visam, de um modo geral, manipul-las (algoritmos)

  • Tipos de Dados, Tipos Abstratos de Dados e Estruturas de DadosTipo de dadosusado no contexto de uma linguagem de programao (tipos primitivos) e est associado a um mtodo de interpretar um padro de bitsTipo abstrato de dado (TAD)modelo junto com um conjunto de operaes definidas sobre o modelo (tipo + operaes validas)Estrutura de dadosforma concreta de se implementar um TAD, ou seja, uma representao computacional do modelo matemtico em questo

  • Estrutura de dados Lista linearAgrupa informaes referentes a um conjunto de elementos que, de alguma forma, se relacionam entre si. Exemplos:gerncia de memriainformaes sobre os funcionrios de uma empresa notas de alunos etc.Cada item chamado de n

  • Estrutura de dados Lista linearExemplos de operaes possveis:Criar uma lista vaziaInserir um item em uma determinada posioRemover o i-simo itemRetornar o i-simo itemOrdenar os itensPesquisar se um determinado item pertence ou no lista

  • Estrutura de dados Lista linearTipos de implementaoAlocao sequencialRealizada com reserva de memriaAlocao estticaOs itens so armazenados em um vetor suficiente para armazenar a listaO i-simo item est armazenado na i-sima posio do vetorMaior esforo computacional para insero e remoo

  • Estrutura de dados Lista linear Implementao alocao sequencial lista.hpp

    #define MAX_TAM 1000#define TipoItem int

    struct tipoLista { TipoItem Item[MAX_TAM]; int Primeiro, Ultimo;};

    void inicializarLista(tipoLista &lista);int listaVazia(tipoLista &lista);void inserir(tipoLista &lista, TipoItem x);void imprimir(tipoLista &lista);

  • Estrutura de dados Lista linear Implementao alocao sequencial lista.cpp

    void inicializarLista(tipoLista &lista){ lista.Primeiro = 0; lista.Ultimo = lista.Primeiro;}

    int listaVazia(tipoLista &lista){ return (lista.Primeiro == lista.Ultimo);}

  • Estrutura de dados Lista linear Implementao alocao sequencial lista.cpp

    void inserir(tipoLista &lista, TipoItem x){ if (lista.Ultimo >= MAX_TAM) cout

  • Estrutura de dados Lista linear Implementao alocao sequencial main.cpp

    int main(int argc, char *argv[]){ tipoLista lista; inicializarLista(lista); inserir(lista, 10); inserir(lista, 20); inserir(lista, 30); inserir(lista, 40);

    imprimir(lista); system("PAUSE"); return 0;}

  • Estrutura de dados Lista linearExerccio

    Implementar as funes:localizarItem(tipoLista &lista, TipoItem item)Esta funo ir receber uma lista e um item como parmetros. Dever retornar o ndice do vetor onde o item se localiza. Caso o mesmo no esteja na lista, retornar o valor -1 (caso o item se encontre em mais de uma posio na lista, retorne a posio da primeira ocorrncia deste item).

    excluirItem(tipoLista &lista, TipoItem item)Esta funo ir receber uma lista e um item como parmetros. Dever excluir o item da lista, caso o mesmo se encontre na lista. Caso contrrio, emita uma mensagem informando que o item no se encontra na lista. Utilize a funo localizarItem para localizar o item antes de exclu-lo.Adaptar a lista para passar a armazenar os dados de um aluno, contendo matrcula e nome.

  • Estrutura de dados Lista linearTipos de implementaoAlocao encadeadaPermite o crescimento dinmico da listaCada item encadeado com o seguinte atravs de uma varivel do tipo ponteiroPermite inserir e remover itens sem deslocar os itens seguintes da listaClula cabea para simplificar as operaes sobre a lista

  • Estrutura de dados Lista linear Implementao alocao encadeada lista.hpp

    #define TipoItem int

    struct tipoNodo{ tipoNodo *Proximo; TipoItem Item; };

    struct tipoLista { tipoNodo* Primeiro; tipoNodo* Ultimo;};void FLVazia(tipoLista *Lista);int listaVazia(tipoLista *Lista);tipoLista* inicializarLista();void inserirNoInicio(tipoLista *Lista, TipoItem item);void inserirNoFim(tipoLista* Lista, TipoItem item);void inserirOrdenado(tipoLista* Lista, TipoItem item);void imprimir(tipoLista *Lista);void liberar(tipoLista* Lista);

  • Estrutura de dados Lista linear Implementao alocao encadeada lista.cpp

    #include #include "lista.hpp"

    using namespace std;

    void FLVazia(tipoLista *Lista){ Lista->Primeiro = NULL; Lista->Ultimo = NULL;}

    int listaVazia(tipoLista *Lista){ return (Lista->Primeiro == NULL);}

    tipoLista* inicializarLista(){ tipoLista* lista = new tipoLista; FLVazia(lista); return lista;}

  • Estrutura de dados Lista linear Implementao alocao encadeada lista.cpp

    tipoNodo* inicializarTipoNodo(){ tipoNodo* x = new tipoNodo; x->Proximo= NULL; return x;}

    void inserirNoInicio(tipoLista *Lista, TipoItem item){ tipoNodo *Nodo; Nodo = inicializarTipoNodo();

    Nodo->Item = item; Nodo->Proximo = Lista->Primeiro; if(listaVazia(Lista)) Lista->Ultimo = Nodo;

    Lista->Primeiro = Nodo;}

  • Estrutura de dados Lista linear Implementao alocao encadeada lista.cpp

    void inserirNoFim(tipoLista* Lista, TipoItem item){ tipoNodo *Nodo; Nodo = inicializarTipoNodo();

    Nodo->Item = item; if(listaVazia(Lista)) Lista->Primeiro = Nodo; else Lista->Ultimo->Proximo = Nodo;

    Lista->Ultimo = Nodo;}

  • Estrutura de dados Lista linear Implementao alocao encadeada lista.cpp

    void inserirOrdenado(tipoLista* Lista, TipoItem item){ tipoNodo *aux, *ant;

    tipoNodo *Nodo = inicializarTipoNodo();

    Nodo->Item = item;

    aux = Lista->Primeiro, ant = NULL;

    while ((aux != NULL) && (aux->Item < item)) { ant = aux; aux = aux->Proximo; } if (ant == NULL) Lista->Primeiro = Nodo; else ant->Proximo = Nodo;

    Nodo->Proximo = aux; if (aux == NULL) Lista->Ultimo = Nodo; }

  • Estrutura de dados Lista linear Implementao alocao encadeada lista.cpp

    void imprimir(tipoLista* Lista){ tipoNodo* aux; cout Primeiro; while (aux != NULL) { cout Proximo; }}

  • Estrutura de dados Lista linear Implementao alocao encadeada lista.cpp

    void liberar(tipoLista* Lista){ tipoNodo* aux; aux = Lista->Primeiro; while(aux != NULL) { aux = aux->Proximo; delete(Lista->Primeiro); Lista->Primeiro = aux; } delete (Lista);}

  • Estrutura de dados Lista linear Implementao alocao encadeada main.cpp

    #include #include #include "lista.hpp"

    using namespace std;

    int main(int argc, char *argv[]){ tipoLista* lista = inicializarLista(); inserirNoInicio(lista, 10); inserirNoInicio(lista, 20); inserirNoFim(lista, 30); inserirNoFim(lista, 40);

    imprimir(lista); liberar(lista);

    system("PAUSE"); return EXIT_SUCCESS;}

  • Estrutura de dados Lista linear Problemas com a lista simplesmente encadeada:Localizar itemInserir item de forma ordenadaRemover itemPercorrer a lista em ordem inversaSoluo:Lista duplamente encadeada

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.hpp

    #define TipoItem int#define tipoNodo struct TipoNodo#define tipoLista struct TipoLista

    void FLVazia(tipoLista *Lista);int listaVazia(tipoLista *Lista);tipoLista* inicializarLista();void inserirNoInicio(tipoLista *Lista, TipoItem item);void inserirNoFim(tipoLista* Lista, TipoItem item);void inserirOrdenado(tipoLista* Lista, TipoItem item);void imprimir(tipoLista *Lista);void imprimirInverso(tipoLista *Lista);void liberar(tipoLista* Lista);void excluirItem(tipoLista* Lista, TipoItem item);

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    #include #include "lista.hpp"

    using namespace std;

    struct TipoNodo{ TipoNodo *Proximo, *Anterior; TipoItem Item; };

    struct TipoLista { TipoNodo* Primeiro; TipoNodo* Ultimo;};

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    void FLVazia(tipoLista *Lista){ Lista->Primeiro = NULL; Lista->Ultimo = NULL;}

    int listaVazia(tipoLista *Lista){ return (Lista->Primeiro == NULL);}

    tipoLista* inicializarLista(){ tipoLista* lista = new tipoLista; FLVazia(lista); return lista;}

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    tipoNodo* inicializarTipoNodo(){ tipoNodo* x = new tipoNodo; x->Proximo= x->Anterior= NULL; return x;}

    void inserirNoInicio(tipoLista *Lista, TipoItem item){ tipoNodo *Nodo; Nodo = inicializarTipoNodo();

    Nodo->Item = item; Nodo->Proximo = Lista->Primeiro; if(listaVazia(Lista)) Lista->Ultimo = Nodo; else Lista->Primeiro->Anterior = Nodo;

    Lista->Primeiro = Nodo;}

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    void inserirNoFim(tipoLista* Lista, TipoItem item){ tipoNodo *Nodo; Nodo = inicializarTipoNodo();

    Nodo->Item = item; if(listaVazia(Lista)) Lista->Primeiro = Nodo; else { Nodo->Anterior = Lista->Ultimo; Lista->Ultimo->Proximo = Nodo; }

    Lista->Ultimo = Nodo;}

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    void inserirOrdenado(tipoLista* Lista, TipoItem item){ tipoNodo *aux; tipoNodo *Nodo = inicializarTipoNodo(); Nodo->Item = item; if (listaVazia(Lista)){ Lista->Primeiro = Nodo; Lista->Ultimo = Nodo; } else { aux = Lista->Primeiro; while ((aux != NULL) && (aux->Item < item)) aux = aux->Proximo; if (aux == Lista->Primeiro){ Nodo->Proximo = Lista->Primeiro; Lista->Primeiro->Anterior= Nodo; Lista->Primeiro = Nodo; } else if (aux == NULL){ Lista->Ultimo->Proximo = Nodo; Nodo->Anterior = Lista->Ultimo; Lista->Ultimo = Nodo; } else { Nodo->Proximo = aux; aux->Anterior->Proximo = Nodo; Nodo->Anterior = aux->Anterior; aux->Anterior = Nodo; } }}

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    void imprimir(tipoLista* Lista){ tipoNodo* aux; cout Primeiro; while (aux != NULL) { cout Proximo; }}

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    void imprimirInverso(tipoLista* Lista){ tipoNodo* aux; cout Ultimo; while (aux != NULL) { cout Anterior; }}

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada lista.cpp

    void liberar(tipoLista* Lista){ tipoNodo* aux; aux = Lista->Primeiro; while(aux != NULL) { aux = aux->Proximo; delete(Lista->Primeiro); Lista->Primeiro = aux; } }

  • Estrutura de dados Lista linear Implementao alocao duplamente encadeada main.cpp

    #include #include #include "lista.hpp"

    using namespace std;

    int main(int argc, char *argv[]){ tipoLista* lista = inicializarLista(); inserirNoInicio(lista, 10); inserirNoInicio(lista, 20); inserirNoFim(lista, 30); inserirNoFim(lista, 40);

    imprimir(lista); liberar(lista);

    system("PAUSE"); return EXIT_SUCCESS;}

  • Estrutura de dados Lista linearTrabalho (entrega dia 18/04)Alterar a implementao da lista duplamente encadeada, para passar a utilizar os recursos da linguagem C++:Alterar forma de passagem de parmetro por referncia (de * para &)Alterar forma de alocao de memria (malloc e free por new e delete)Implementar uma lista contendo um time, seu cdigo, e para cada time, armazenar o cdigo, o nome e nmero da camisa dos seus trs principais jogadoresTanto os times quanto os jogadores devem ser armazenados por ordem alfabtica de nome. Os cdigos devem ser gerados automaticamente, medida que os itens forem inseridos na listaImplementar funes para:Inserir um time na listaInserir os jogadores na listaRemover um time da lista (atravs de seu cdigo)Remover um jogador de um time (atravs de seu cdigo)Imprimir todos os times em ordem crescente e decrescente de nome, com seus jogadores, tambm em ordem crescente e decrescente de nomeImprimir um time especfico, com seus jogadores

  • PilhaLista linear onde tanto a operao de insero quanto a de retirada so realizadas no final (topo da pilha):O primeiro elemento inserido ser o ltimo a ser retiradoO ltimo elemento inserido ser o primeiro a ser retiradoChamada LIFO (Last In, First Out)AplicaesAnlise de sintaxe de expresses 1 * ( 2 [ 5 + { 7 + 9 }] ) e 2 * { 3 ( 4 + [ 2 + 3 ] ) } vlidas2 * ( 3 [ 4+5 ) ] invlida Algoritmos recursivos

  • PilhaDuas operaes bsicasEmpilhar (push)Inserir um novo elemento no topoDesempilhar (pop)Retirar o elemento do topo

  • PilhaImplementao alocao esttica pilha.hpp

    #define tipoPilha struct TipoPilha#define tipoItem int

    tipoPilha* inicializaPilha();int vazia(tipoPilha* Pilha);void empilha(tipoItem item, tipoPilha* Pilha);tipoItem desempilha(tipoPilha* Pilha);void libera(tipoPilha* Pilha);

  • PilhaImplementao alocao esttica pilha.cpp

    #include "pilha.hpp"#include #define MaxTam 1000

    using namespace std;

    struct TipoPilha{ tipoItem Item[MaxTam]; int Ultimo;};

  • PilhaImplementao alocao esttica pilha.cppTipoPilha* inicializaPilha(){ TipoPilha* pilha = new TipoPilha; pilha->Ultimo = 0; return pilha;}

    int vazia(TipoPilha* Pilha){ return (Pilha->Ultimo == 0);}

  • PilhaImplementao alocao esttica pilha.cpp

    void empilha(tipoItem item, tipoPilha* Pilha){ if (Pilha->Ultimo >= MaxTam) cout Item[Pilha->Ultimo] = item; Pilha->Ultimo++; } }

  • PilhaImplementao alocao esttica pilha.cpptipoItem desempilha(TipoPilha* Pilha){ tipoItem v; if (vazia(Pilha)) cout Item[Pilha->Ultimo-1]; Pilha->Ultimo--; return v; }}void libera(TipoPilha* Pilha){ delete(Pilha); }

  • PilhaImplementao alocao esttica main.cpp#include #include "pilha.hpp"

    using namespace std;

    int main(int argc, char *argv[]){ tipoPilha *pilha = inicializaPilha(); empilha(70, pilha); empilha(60, pilha); empilha(90, pilha); empilha(50, pilha); tipoItem item; while (!vazia(pilha)) { item = desempilha(pilha); cout

  • PilhaImplementao alocao dinmica pilha.hpp

    #define tipoPilha struct TipoPilha#define tipoItem int

    tipoPilha* inicializaPilha();int vazia(tipoPilha* Pilha);void empilha(tipoItem item, tipoPilha* Pilha);tipoItem desempilha(tipoPilha* Pilha);void libera(tipoPilha* Pilha);

  • PilhaImplementao alocao dinmica pilha.cpp#include "pilha.hpp"#include

    using namespace std;

    struct TipoNodo { tipoItem item; TipoNodo* Proximo;};

    struct TipoPilha { TipoNodo* Primeiro;};

  • PilhaImplementao alocao dinmica pilha.cpp

    TipoPilha* inicializaPilha(){ TipoPilha* pilha = new TipoPilha; pilha->Primeiro = NULL; return pilha;}

    int vazia(TipoPilha* Pilha){ return (Pilha->Primeiro == NULL);}

    TipoNodo* inicializaTipoNodo(){ TipoNodo* x = new TipoNodo; x->Proximo = NULL;

    return x;}

  • PilhaImplementao alocao dinmica pilha.cpp

    void empilha(tipoItem item, TipoPilha* Pilha){ TipoNodo* nodo = inicializaTipoNodo(); nodo->item= item; nodo->Proximo = Pilha->Primeiro; Pilha->Primeiro = nodo;}

  • PilhaImplementao alocao dinmica pilha.cpp

    tipoItem desempilha(TipoPilha* Pilha){ tipoItem item; if (vazia(Pilha)) cout Primeiro->item; TipoNodo* nodo = Pilha->Primeiro; Pilha->Primeiro = Pilha->Primeiro->Proximo; delete(nodo); return item; }}

  • PilhaImplementao alocao dinmica pilha.cpp

    void libera(TipoPilha* Pilha){ TipoNodo* nodo = Pilha->Primeiro; while (nodo != NULL) { TipoNodo* aux = nodo->Proximo; delete(nodo); nodo = aux; } delete(Pilha);}

  • PilhaImplementao alocao dinmica main.cpp#include #include "pilha.hpp"

    using namespace std;

    int main(int argc, char *argv[]){ tipoPilha *pilha = inicializaPilha(); empilha(70, pilha); empilha(60, pilha); empilha(90, pilha); empilha(50, pilha); tipoItem item; while (!vazia(pilha)) { item = desempilha(pilha); cout

  • PilhaExemplo de aplicao - Notao Polonesa Reversa((1 + 2) * 4) + 3 1 2 + 4 * 3 + em notao polonesa reversa Utilizando uma pilha consideramos:empilhar quando encontrar um operando;desempilhar dois operandos e achar o valor quando encontrar uma operao.empilhar o resultado.

    Resultado final

    EntradaOperaoPilha1Empilhar12Empilhar1,2+Somar34Empilhar3,4*Multiplicar123Empilhar12,3+Somar15

  • FilaLista linear onde a operao de insero ocorre no final da lista, e a de retirada no final da lista:O primeiro elemento inserido ser o primeiro a ser retiradoO ltimo elemento inserido ser o ltimo a ser retiradoChamada FIFO (First In, First Out)AplicaesFilas de espera em diversos domniosAlgoritmos para a representao de processos que envolvem a partilha e distribuio de recursos (timesharing).

  • Fila

  • FilaOperaes bsicasCriaoDestruioInsero de um elementoRemoo de um elementoLocalizao de um elemento para consulta ou alterao da informao

  • FilaImplementao alocao esttica fila.hpp#define tipoFila struct TipoFila#define tipoItem int

    tipoFila* inicializaFila();int vazia(tipoFila* Fila);void enfileira(tipoItem item, tipoFila* Fila);tipoItem desenfileira(tipoFila* Fila);void libera(tipoFila* Fila);

  • FilaImplementao alocao esttica fila.cpp#include "fila.hpp"#include #define MaxTam 1000

    using namespace std;

    struct TipoFila{ tipoItem Item[MaxTam]; int Primeiro, Ultimo;};

  • FilaImplementao alocao esttica fila.cppTipoFila* inicializaFila(){ TipoFila* fila = new (TipoFila); fila->Primeiro = fila->Ultimo = 0; return fila;}

    int vazia(TipoFila* fila){ return (fila->Primeiro == fila->Ultimo);}

  • FilaImplementao alocao esttica fila.cpp

    void enfileira(tipoItem item, TipoFila* fila){ if (fila->Ultimo >= MaxTam) cout Item[fila->Ultimo] = item; fila->Ultimo++; } }

  • FilaImplementao alocao esttica fila.cpptipoItem desenfileira(TipoFila* fila){ tipoItem v; if (vazia(fila)) cout Item[fila->Primeiro]; fila->Primeiro++; return v; }}

  • FilaImplementao alocao esttica fila.cpp

    void libera(TipoFila* fila){ delete(fila); }

  • FilaImplementao alocao esttica main.cpp#include #include "filaEstatica.hpp"

    using namespace std;

    int main(int argc, char *argv[]){ tipoFila *fila = inicializaFila(); enfileira(70, fila); enfileira(60, fila); enfileira(90, fila); enfileira(50, fila); tipoItem item; while (!vazia(fila)) { item = desenfileira(fila); cout

  • FilaImplementao alocao dinmica fila.hpp#define tipoFila struct TipoFila#define tipoItem int

    tipoFila* inicializaFila();int vazia(tipoFila* Fila);void enfileira(tipoItem item, tipoFila* Fila);tipoItem desenfileira(tipoFila* Fila);void libera(tipoFila* Fila);

  • FilaImplementao alocao dinmica fila.cpp#include "fila.hpp"#include

    using namespace std;

    struct TipoNodo { tipoItem item; TipoNodo* Proximo;};

    struct TipoFila{ TipoNodo *Primeiro, *Ultimo; };

  • FilaImplementao alocao dinmica fila.cppTipoFila* inicializaFila(){ TipoFila* fila = new TipoFila; fila->Primeiro = fila->Ultimo = NULL; return fila;}

    int vazia(TipoFila* Fila){ return (Fila->Primeiro == NULL);}

    TipoNodo* inicializaTipoNodo(){ TipoNodo* x = new TipoNodo; x->Proximo = NULL;

    return x;}

  • FilaImplementao alocao dinmica fila.cppvoid enfileira(tipoItem item, TipoFila* Fila){ // insere item no fim da fila TipoNodo *nodo = inicializaTipoNodo(); nodo->item = item; if(vazia(Fila)) Fila->Primeiro = nodo; else Fila->Ultimo->Proximo = nodo;

    Fila->Ultimo = nodo;}

  • FilaImplementao alocao dinmica fila.cpp

    tipoItem desenfileira(TipoFila* Fila){ tipoItem v; if (vazia(Fila)) cout Primeiro->item; TipoNodo* it = Fila->Primeiro; Fila->Primeiro = Fila->Primeiro->Proximo; delete(it); return v; }}

  • FilaImplementao alocao dinmica fila.cpp

    void libera(TipoFila* Fila){ TipoNodo* nodo = Fila->Primeiro; while (nodo != NULL) { TipoNodo* aux = nodo->Proximo; delete(nodo); nodo = aux; } delete(Fila);}

  • FilaImplementao alocao dinmica main.cpp#include #include "fila.hpp"

    using namespace std;

    int main(int argc, char *argv[]){ tipoFila *fila = inicializaFila(); enfileira(70, fila); enfileira(60, fila); enfileira(90, fila); enfileira(50, fila); tipoItem item; while (!vazia(fila)) { item = desenfileira(fila); cout