class PriorityQ
{
private int maxSize;
private long queArray[];
private int nItems;
public PriorityQ(int s)
{
maxSize=s;
queArray=new long[maxSize];
nItems=0;
}
public void insert(long item)
{
int j;
if(nItems==0)
{
queArray[nItems++]=item;
}
else
{
for(j=nItems-1;j>=0;j--)
{
if(item>queArray[j])
{
queArray[j+1]=queArray[j];
}
else
{
break;
}
queArray[j+1]=item;
nItems++;
}
}
}
public long remove()
{
return queArray[--nItems];
}
public long peekMin()
{
return queArray[nItems-1];
}
public boolean isEmpty()
{
return (nItems==0);
}
public boolean isFull()
{
return (nItems==maxSize);
}
}class PriorityQApp
{
public static void main(String args[])
{
PriorityQ thePQ=new PriorityQ(5);
thePQ.insert(30);
thePQ.insert(50);
thePQ.insert(10);
thePQ.insert(40);
thePQ.insert(20);
while (!thePQ.isEmpty())
{
long item=thePQ.remove();
System.out.print(item+" ");
}
System.out.print(" ");
}
}
这个程序应该输出的是“10 20 30 40 50”,为什么输出的是“50 30”啊?
不知道错在哪了,望各位指点下!
{
private int maxSize;
private long queArray[];
private int nItems;
public PriorityQ(int s)
{
maxSize=s;
queArray=new long[maxSize];
nItems=0;
}
public void insert(long item)
{
int j;
if(nItems==0)
{
queArray[nItems++]=item;
}
else
{
for(j=nItems-1;j>=0;j--)
{
if(item>queArray[j])
{
queArray[j+1]=queArray[j];
}
else
{
break;
}
queArray[j+1]=item;
nItems++;
}
}
}
public long remove()
{
return queArray[--nItems];
}
public long peekMin()
{
return queArray[nItems-1];
}
public boolean isEmpty()
{
return (nItems==0);
}
public boolean isFull()
{
return (nItems==maxSize);
}
}class PriorityQApp
{
public static void main(String args[])
{
PriorityQ thePQ=new PriorityQ(5);
thePQ.insert(30);
thePQ.insert(50);
thePQ.insert(10);
thePQ.insert(40);
thePQ.insert(20);
while (!thePQ.isEmpty())
{
long item=thePQ.remove();
System.out.print(item+" ");
}
System.out.print(" ");
}
}
这个程序应该输出的是“10 20 30 40 50”,为什么输出的是“50 30”啊?
不知道错在哪了,望各位指点下!
{
if(item>queArray[j])
{
queArray[j+1]=queArray[j];
}
else
{
break;
}
你这段代码中,你应该用continue,而不是break;break是推出循环的,所以插入50后后面的数没有被插入,结果只插入30和50
public void insert(long item)
{
if(nItems==0)
{
queArray[nItems]=item;
nItems++;
}
else
{ if(item<queArray[nItems-1])
{queArray[nItems]=item;
nItems++;
}
else
{for(int j=0;j<nItems;j++)
{ if(item>queArray[j])
{
for(int k=nItems-1;k>=j;k--)
{queArray[k+1]=queArray[k];
}
queArray[j]=item;
break;
}
}
nItems++;
}
}
}