大家好,我有一个问题!
我尝试使用环绕式实现Dequeue,并且在大多数情况下我认为我已正确实现了它。但问题是显示Dequeue的内容。
我遇到问题的部分是display方法中的else-if语句。每当左侧做到它时,我就会遇到问题。
我无法发布图片,至少需要10个我不了解的声誉。
输入的输入: insertRight(10); insertLeft(9); insertRight(8); insertLeft(7); insertRight(6); insertLeft(5); insertRight(4); insertLeft(3); insertRight(7); insertLeft(2);
预期产出:1 3 5 7 9 10 8 6 4 2
public class Dequeue
{
private int[] deArray;
private int maxSize;
private int nItems;
private int left;
private int right;
public Dequeue(int size) {
maxSize = size;
deArray = new int[maxSize];
left = (maxSize/2)+1;
right = (maxSize/2);
nItems = 0;
}
public boolean insertLeft(int j)
{
if(isFull())
{
System.out.println("The dequeue is full.");
return(false);
}
if (left == 0)
left = maxSize;
deArray[--left] = j;
nItems++;
return(true);
}
public boolean insertRight(int j)
{
//takes an integer and returns false if DQ is full, otherwise insert Right or Rear
if(isFull())
{
System.out.println("The dequeue is full.");
return(false);
}
if(right == maxSize - 1)
right = -1;
deArray[++right] = j;
nItems++;
return(true);
}
public int removeLeft()
{
//if the DQ is not empty, removes and returns integer on left or front
if(isEmpty())
{
System.out.println("The dequeue is empty.");
return(0);
}
int temp = deArray[left];
if (left == maxSize - 1)
left = 0;
else
left++;
nItems--;
return temp;
}
public int removeRight()
{
//if the DQ is not empty, removes and returns integer on right or rear
if (isEmpty())
{
System.out.println("Dequeue is empty.");
return (0);
}
int temp = deArray[right];
right--;
if(right<0)
right = maxSize -1;
nItems--;
return temp;
}
public boolean isEmpty()
{
return(nItems == 0);
}
public boolean isFull()
{
return(nItems == maxSize);
}
public void display()
{
int i;
System.out.println("Right is equal to: " +right+" and left is equal to: " +left+ "\n");
System.out.println("\nMaxsize is equal to: "+maxSize);
if(isEmpty())
throw new RuntimeException("The dequeue is empty.");
if(left < right)
{
for(i= right; i<left; i++)
{
if(i==maxSize)
i = 0;
System.out.print(deArray[i]+ " ");
}
for(i=left; i< right+1;i++)
{
if(i==maxSize)
i = 0;
System.out.print(deArray[i]+ " ");
}
}
else if (right < left)
{
for(i = right; i < left; i++)
if(i == maxSize)
{i = 0;}
System.out.print(deArray[i] + " ");
for(i = left+1; i <= ((maxSize-1)); i++)
System.out.print(deArray[i] + " ");
}
else
System.out.println("Oh no!");
}}