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

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

Implementação de FILAS com Alocação Dinâmica

Apresentações semelhantes


Apresentação em tema: "Implementação de FILAS com Alocação Dinâmica"— Transcrição da apresentação:

1 Implementação de FILAS com Alocação Dinâmica

2 Especificação da Interface
/* * Interface do Tad Fila */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define MAX 10 // tamanho máximo da Pilha #define TRUE 1 #define FALSE 0 typedef int Elemento; // tipo a ser armazenado typedef struct nodo { Elemento item; struct nodo *prox; }* Nodo; typedef struct { Nodo inicio,fim; }TadFila; int inicializaFila(TadFila *); int filaVazia(TadFila); int insereNaFila (TadFila *, Elemento); int removeDaFila (TadFila *, Elemento *);

3 Especificação da Interface
Foi utilizada uma estrutura chamada nodo contendo um campo item do tipo Elemento e um campo prox; O TAD Fila por sua vez é uma estrutura contendo os campos inicio e fim que são apontadores para struct nodo (Nodo).

4 Declarando uma Pilha TadFila q; inicio=NULL; fim= NULL;
Uma variável to tipo TadFila é uma estrutura contendo estes dois campos. Por exemplo, a seqüência: TadFila q; inicio=NULL; fim= NULL; Define a estrutura:

5 Inserindo um elemento

6 Inserindo um Elemento Existem duas situações que devem ser tratadas diferentemente: Quando a Fila está vazia e quando não está vazia. A seguinte seqüência de passos deve ser utilizada: aloca o novonodo atribui os valores ao novo nodo Se a fila está vazia inicio = novonodo fim = novonodo Senão o prox do nodo apontado por fim recebe o novonodo fim=novonodo

7 Função de inserção int insereNaFila(TadFila *q, Elemento elem) {
Nodo novonodo; novonodo = (Nodo) malloc (sizeof (struct nodo)); novonodo->item=elem; novonodo->prox=NULL; if (filaVazia(*q)== TRUE){ q->fim=novonodo; q->inicio=novonodo; } else{ q->fim->prox = novonodo; return (TRUE);

8 Remoção A remoção deve guardar o valor que está no fim da Fila, atualizar o ponteiro de Fim e liberar o nodo que estava no fim. Os seguintes passos devem ser seguidos: Se a Fila não está vazia Guarda o valor contido no nodo a ser eliminado (que está no inicio da Fila) Guarda o endereço do nodo a ser eliminado (inicio) em uma variável auxiliar (aux) Inicio recebe o próximo de inicio Libera a área apontada por aux

9 Operação removeDaFila
int removeDaFila(TadFila *q, Elemento *elem){ Nodo aux; if (filaVazia(*q) == FALSE) { *elem = q->inicio->item; aux = q->inicio; q->inicio = q->inicio->prox; free(aux); return (TRUE); } return (FALSE);


Carregar ppt "Implementação de FILAS com Alocação Dinâmica"

Apresentações semelhantes


Anúncios Google