Mon problème est plus sémantique que fonctionnel, car le code semble implémenter correctement les fonctions deQueue et enQueue.Implémentation de tas correcte dans une file d'attente prioritaire
Les fonctions de reheapDown et reheapUp sont utilisés de manière incorrecte, et je crois que le problème réside dans ma fonction de tas
package priqueue;
public class Hosheap{
private Patient[] elements;
private int numElements;
public Hosheap(int maxSize)
{
elements= new Patient[maxSize];
numElements=maxSize;
}
public void ReheapDown(int root,int bottom)
{
int maxChild;
int rightChild;
int leftChild;
leftChild=root*2+1;
rightChild=root*2+2;
if (leftChild<=bottom)
{
if(leftChild==bottom)
maxChild=leftChild;
else
{
if(elements[leftChild].getPriority() <= elements[rightChild].getPriority())
maxChild=rightChild;
else
maxChild=leftChild;
}
if(elements[root].getPriority()<elements[maxChild].getPriority())
{
Swap(root,maxChild);
ReheapDown(maxChild,bottom);
}
}
}
public void ReheapUp(int root,int bottom)
{
int parent;
if(bottom>root)
{
parent=(bottom-1)/2;
if(elements[parent].getPriority()<elements[bottom].getPriority())
{
Swap(parent,bottom);
ReheapUp(root,parent);
}
}
}
public void Swap(int Pos1, int Pos2)
{
Patient temp;
temp = elements[Pos1];
elements[Pos1]=elements[Pos2];
elements[Pos2]=temp;
}
public Patient getElement(int e)
{
return elements[e];
}
public void setElement(Patient p, int n)
{
elements[n]=p;
}
}
L'idée est de réorganiser un système simple de file d'attente prioritaire donc quand on enlève un objet patient, ReheapUp ou vers le bas réorganise correctement la file d'attente, que le code n'atteint pas. Dois-je également inclure le code de file d'attente prioritaire, Ou est-ce déjà trop long? J'utilise NetBeans IDE 6.0.1, Si cela peut vous aider.
Vous pouvez consulter cette implémentation simple mais efficace ici http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary2#priority. – Dimitris