sexta-feira, 11 de outubro de 2013
2013/2-AED-2013.10.10: TAD Fila (Implementação Parcial)
// especificação da TAD fila
// definicao da chave da fila
typedef int TipoChave;
// definicao do registro para o item
struct T_Item{
TipoChave chave;
};
// definicao do tipo TipoItem
typedef struct T_Item TipoItem;
// definição do apontador para celula
typedef struct T_Celula * TipoApontador;
// definição do registro T_Celula
struct T_Celula{
TipoItem Item; // item
TipoApontador Prox; // apontador para prox. celula
};
// definicao do TipoCelula
typedef struct T_Celula TipoCelula;
// definicao do registro T_Fila
struct T_Fila{
int Tamanho;
int Capacidade;
TipoApontador Frente, Tras;
};
// definicao do TipoFila
typedef struct T_Fila TipoFila;
// operacoes da TAD FILA
// enfileirar
void Enfileirar(TipoFila * Fila, TipoItem item);
// desenfileira
void Desenfileirar(TipoFila * Fila, TipoItem * item);
// criar uma fila vazia
void CriarFila(TipoFila * Fila, int capacidade);
// verificar se estah cheia
int FilaCheia(TipoFila Fila);
// verificar se estah vazia
int FilaVazia(TipoFila Fila);
// obter frente
void FilaFrente(TipoFila Fila, TipoItem * item);
// imprimir o conteudo da fila
void ImprimirFila(TipoFila Fila);
// IMPLEMENTACOES DAS OPERACOES
// criar uma fila vazia
void CriarFila(TipoFila * Fila, int capacidade)
{
// 1) criar a celula cabeca
Fila->Frente = (TipoApontador)
malloc(sizeof(TipoCelula));
// 2) fazer frente e tras apontar para a nova celula
Fila->Tras = Fila->Frente;
// 3) inicializar o tras (prox = NULL)
Fila->Tras->Prox = NULL;
// 4) inicializar o tamanho e a capacidade
Fila->Tamanho = 0;
Fila->Capacidade = capacidade;
}
// enfileirar
void Enfileirar(TipoFila * Fila, TipoItem item)
{
// 1) verificar se a FILA está cheia
if (FilaCheia(*Fila) == 1){
printf("ERRO: Fila está cheia!");
return;
}
// 2) criar uma nova celula a partir do TRAS
Fila->Tras->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
// 3) Adicionar o item na nova celula
Fila->Tras->Prox->Item = Item;
// 4) inicializar o PROX da nova celula
// 5) atualizar o TRAS
// 6) Atualizar o tamanho da FILA
}
// verificar se estah cheia
int FilaCheia(TipoFila Fila)
{ if (Fila.Capacidade == Fila.Tamanho)
{ return 1;
} else {
return 0;
}
}
// verificar se estah vazia
int FilaVazia(TipoFila Fila)
{ if (Fila.Frente == Fila.Tras)
{ return 1;
} else {
return 0;
}
}
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário