Fila

7 respostas
C

Alguem ja implementou algum algoritimo que usa-se Fila , de preferencia usando Fila Dupla …

Valews

7 Respostas

cariocathi

Sim, implementei semestre passado na faculdade.

Quais são suas dúvidas, talvez eu possa ajudar !

:idea: ! :idea:

C

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

J

“Clodoaldo”:
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…

 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)

 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…

cariocathi

É isso mesmo…

C

Ta…vc não tem nenhum exemplo prático , pq ainda não entendi o conceito de Fila Dupla e nem como implementar…

Valews

J

“Clodoaldo”:
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

V

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;

}
Criado 25 de setembro de 2003
Ultima resposta 26 de set. de 2003
Respostas 7
Participantes 4