Alguem ja implementou algum algoritimo que usa-se Fila , de preferencia usando Fila Dupla …
Valews
Alguem ja implementou algum algoritimo que usa-se Fila , de preferencia usando Fila Dupla …
Valews
Sim, implementei semestre passado na faculdade.
Quais são suas dúvidas, talvez eu possa ajudar !
:idea: ! :idea:
Na verdade eu sei usar a Fila , agora Fila Dupla nem tenho ideia de como fazer…
Vc tem algum exemplo…eu sei que na dupla vc pode inserir e retirar de qualquer posicao…
Valews
Na verdade eu sei usar a Fila , agora Fila Dupla nem tenho ideia de como fazer…Vc tem algum exemplo…eu sei que na dupla vc pode inserir e retirar de qualquer posicao…
Valews
Na fila dupla vc tem um ponteiro indicando para o próximo nó, e um outro ponteiro apontando para o nó anterior…
Você pode retirar e inserir em qualquer posição justamente por causa dos dois ponteiros…
Ex.:
novo //novo nó…
novo->prox (ponteiro para o próximo nó)
novo->ant (ponteiro para o nó anterior)
Inserindo:
Aponte para um nó onde vc quer inserir… (pont) A inserção ocorre no próximo nó do pont…
Aí vc faz:
novo->prox = pont->prox;
novo->ant=pont;
pont->prox->ant=novo;
pont->prox = novo
Remoção:
Aponte para o nó q vc quer remover (remov)
Aí vc faz:
remov->prox->ant=remov->ant;
remov->ant->prox=remov->prox;
remov->prox=null;
remov->ant=null;
É isso…Se tiver alguma coisa errada me corrigam…
Falow…
É isso mesmo…
Ta…vc não tem nenhum exemplo prático , pq ainda não entendi o conceito de Fila Dupla e nem como implementar…
Valews
Ta…vc não tem nenhum exemplo prático , pq ainda não entendi o conceito de Fila Dupla e nem como implementar…Valews
Que q vc quer exatamente?? Quer uma implementação de inserção e remoção ou qualquer coisa desde que seja uma fila dupla…
Falow
Na verdade a definição de fila é: uma lista na qual vc só pode inserir na cauda. E acessar e deletar somente na cabeça. Fila simples possui somente um ponteiro apontando para o nó posterior. A dupla possui 2 ponteiros em que um aponta para o nó anterior e o outro para o posterior. Os métodos mais comuns são:enfileirar(na cauda), desenfileirar(na cabeca),retornar e empty. Aí está uma implementação, em c++ :(, de fila dinamica simples.
enum Error_code {sucess, overflow, underflow};
typedef int Fila_Ent;
typedef Fila_Ent Node_Ent;
struct Node {
Node_Ent dado;
Node *prox;
construtor
Node();
};
Node::Node()
{
prox = NULL;
}
class Fila {
public:
Fila();
bool empty() const;
Error_code desenfileirar();
Error_code enfileirar(const Fila_Ent &item);
Error_code retorna(Fila_Ent &item) const;
int size() const;
protected:
// int count;
Node * cabeca, *cauda;
};
Fila::Fila()
{
cauda = cabeca = NULL;
}
bool Fila::empty() const
{
return (cabeca==NULL);
}
Error_code Fila::enfileirar(const Fila_Ent &item)
{
Node *nova_cauda = new Node(item, NULL);
if (nova_cauda == NULL) return overflow;
if (cauda == NULL) cabeca = cauda = nova_cauda; // Se fila Vazia.
else {
cauda->prox = nova_cauda;
cauda = nova_cauda;
}
return sucess;
}
Error_code Fila::desenfileirar()
{
if (cabeca == NULL) return underflow;
Node *ant = cabeca;
cabeca = ant->prox;
if (cabeca == NULL) cauda = NULL; // Fila Vazia
delete ant;
return sucess;
}
Error_code Fila::retorna(Fila_Ent &item) const
{
if (cabeca == NULL) return underflow;
item = cabeca->dado;
return sucess;
}