Problema com enqueue e dequeue

Iniciado por HeNRiQueZ1M, 07 de Outubro de 2011, 18:48

tópico anterior - próximo tópico

HeNRiQueZ1M

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.

fpissarra

#1
Um jeito mais fácil de lidar com filas é usar o container STL "queue", em C++:

#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;
}

HeNRiQueZ1M

Infelizmente o programa deve ser feito em C.
Tem alguma forma de usar isso em C??

fpissarra

Citação de: HeNRiQueZ1M online 10 de Outubro de 2011, 13:44
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.

fpissarra

Citação de: HeNRiQueZ1M online 10 de Outubro de 2011, 13:44
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

HeNRiQueZ1M

Citação de: fpissarra online 11 de Outubro de 2011, 14:39
Citação de: HeNRiQueZ1M online 10 de Outubro de 2011, 13:44
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