Autor Tópico: Problema com enqueue e dequeue  (Lida 2507 vezes)

Offline HeNRiQueZ1M

  • Usuário Ubuntu
  • *
  • Mensagens: 3
    • Ver perfil
Problema com enqueue e dequeue
« Online: 07 de Outubro de 2011, 18:48 »
Tenho que criar um programa que gera senhas com uma determinada prioridade para banco.
Estou usando o seguinte void para adicionar novas senhas:

void enqueue(fila **ag, float s, int p)
{
fila *novo, *aux;
novo = (fila*)malloc(sizeof(fila));
novo->prox = NULL;
novo->senha = s;
novo->prio = p;
if (*ag == NULL)
{
*ag = novo;
}
else
{
aux = *ag;
while(novo->prio > aux->prio && aux->prox != NULL)
{
while(novo->senha < aux->senha && aux->prox != NULL)
{
aux=aux->prox;
}
aux->prox = novo;
}
}
}

Creio que os whiles estão errados, mas minha intenção é adicionar ao topo a senha com menor valor e menor prioridade.

Esse é o comando para mostrar a 1ª senha e eliminá-la.

void dequeue(fila **ag)
{
fila *topo;
int p;
float s;
topo = *ag;
if (topo == NULL)
{
printf(">> Não há senhas a serem chamadas\n");
}
else
{
p = topo->prio;
s = topo->senha;
printf("\n>> Senha Chamada: %3.2f - Prioridade: %d\n",s,p);
*ag = topo->prox;
}
}

Quando eu adiciono 2 senhas e peço pra ele mostrar a primeira, dá certo, porém, ao usar o comando novamente para mostrar a 2ª senha (que agora é a 1ª) ele dá a mensagem:
">> Não há senhas a serem chamadas"

Alguem poderia me ajudar a achar o erro?

Obrigado.

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Problema com enqueue e dequeue
« Resposta #1 Online: 10 de Outubro de 2011, 10:20 »
Um jeito mais fácil de lidar com filas é usar o container STL "queue", em C++:

Código: [Selecionar]
#include <queue>

std::queue<float> passwordQueue;

void insertOnQueue(float password)
{ passwordQueue.push(password); }

/* retorna "false" se a fila está vazia! */
bool extractFromQueue(float& password)
{
  if (!passwordQueue.empty())
  {
    password = passwordQueue.front();
    passwordQueue.pop();
    return true;
  }

  return false;
}
« Última modificação: 10 de Outubro de 2011, 10:22 por fpissarra »

Offline HeNRiQueZ1M

  • Usuário Ubuntu
  • *
  • Mensagens: 3
    • Ver perfil
Re: Problema com enqueue e dequeue
« Resposta #2 Online: 10 de Outubro de 2011, 13:44 »
Infelizmente o programa deve ser feito em C.
Tem alguma forma de usar isso em C??

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Problema com enqueue e dequeue
« Resposta #3 Online: 11 de Outubro de 2011, 14:29 »
Infelizmente o programa deve ser feito em C.
Tem alguma forma de usar isso em C??

É trabalho de escola?

Consulte "The Art of Computer Programming - Volume I" de Donald E. Knuth.

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Problema com enqueue e dequeue
« Resposta #4 Online: 11 de Outubro de 2011, 14:39 »
Infelizmente o programa deve ser feito em C.
Tem alguma forma de usar isso em C??

Perguntas:

1. Pq usar double linked list?
2. Pq usar lista encadeada, de forma geral?

[]s
Fred

Offline HeNRiQueZ1M

  • Usuário Ubuntu
  • *
  • Mensagens: 3
    • Ver perfil
Re: Problema com enqueue e dequeue
« Resposta #5 Online: 11 de Outubro de 2011, 15:12 »
Infelizmente o programa deve ser feito em C.
Tem alguma forma de usar isso em C??

Perguntas:

1. Pq usar double linked list?
2. Pq usar lista encadeada, de forma geral?

[]s
Fred

são ordens do professor =T