In: Computer Science
You may not use the java.util.Stack
class.
You may not use the java.util.Queue class.
Write a method public static Object removeSecond (): It removes
and returns the element just behind the front element.
Precondition: The queue has at least two elements.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// Queue.java
// demonstrates queue
// to run this program: C>java QueueApp
////////////////////////////////////////////////////////////////
class Queue
{
private int maxSize;
private long[] queArray;
private int front;
private int rear;
private int nItems;
//--------------------------------------------------------------
public Queue(int s) // constructor
{
maxSize = s;
queArray = new long[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
//--------------------------------------------------------------
public void insert(long j) // put item at rear of queue
{
if(rear == maxSize-1) // deal with wraparound
rear = -1;
queArray[++rear] = j; // increment rear and insert
nItems++; // one more item
}
//--------------------------------------------------------------
public long remove() // take item from front of queue
{
long temp = queArray[front++]; // get value and incr front
if(front == maxSize) // deal with wraparound
front = 0;
nItems--; // one less item
return temp;
}
//--------------------------------------------------------------
public long peekFront() // peek at front of queue
{
return queArray[front];
}
//--------------------------------------------------------------
public boolean isEmpty() // true if queue is empty
{
return (nItems==0);
}
//--------------------------------------------------------------
public boolean isFull() // true if queue is full
{
return (nItems==maxSize);
}
//--------------------------------------------------------------
public int size() // number of items in queue
{
return nItems;
}
//--------------------------------------------------------------
} // end class Queue
////////////////////////////////////////////////////////////////
class QueueApp
{
public static void main(String[] args)
{
Queue theQueue = new Queue(5); // queue holds 5 items
theQueue.insert(10); // insert 4 items
theQueue.insert(20);
theQueue.insert(30);
theQueue.insert(40);
theQueue.remove(); // remove 3 items
theQueue.remove(); // (10, 20, 30)
theQueue.remove();
theQueue.insert(50); // insert 4 more items
theQueue.insert(60); // (wraps around)
theQueue.insert(70);
theQueue.insert(80);
while( !theQueue.isEmpty() ) // remove and display
{ // all items
long n = theQueue.remove(); // (40, 50, 60, 70, 80)
System.out.print(n);
System.out.print(" ");
}
System.out.println("");
} // end main()
} // end class QueueApp
////////////////////////////////////////////////////////////////
ONLY FOR TESTING, DO NOT CHANGE ANYTHING IN QUEUETEST.JAVA
public class QueueTest { public static void main(String[] args) { Queue theQueue = new Queue(20); // queue holds 5 items theQueue.insert(10); // insert 4 items theQueue.insert(20); theQueue.insert(30); theQueue.insert(40); theQueue.showQueue(); System.out.println("Removing 3 items"); theQueue.remove(); // remove 3 items theQueue.remove(); // (10, 20, 30) theQueue.remove(); theQueue.showQueue(); System.out.println("Inserting 4 more items"); theQueue.insert(50); // insert 4 more items theQueue.insert(60); // (wraps around) theQueue.insert(70); theQueue.insert(80); theQueue.showQueue(); System.out.println("Calling removeSecond()"); long second = theQueue.removeSecond(); theQueue.showQueue(); } // end main() }
Here is the completed code for this problem. Only the modified Queue class is attached. Comments are included, go through it, learn how things work and let me know if you have any doubts or if you need anything to change. If you are satisfied with the solution, please rate the answer. If not, PLEASE let me know before you rate, I’ll help you fix whatever issues. Thanks
Note: showQueue method is also implemented, because your test program needs that to compile correctly.
// Queue.java
class Queue {
private int maxSize;
private long[] queArray;
private int front;
private int rear;
private int nItems;
// --------------------------------------------------------------
public Queue(int s) // constructor
{
maxSize = s;
queArray = new long[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
// --------------------------------------------------------------
public void insert(long j) // put item at rear of queue
{
if (rear == maxSize - 1) // deal with wraparound
rear = -1;
queArray[++rear] = j; // increment rear and insert
nItems++; // one more item
}
// --------------------------------------------------------------
public long remove() // take item from front of queue
{
long temp = queArray[front++]; // get value and incr front
if (front == maxSize) // deal with wraparound
front = 0;
nItems--; // one less item
return temp;
}
// --------------------------------------------------------------
public long peekFront() // peek at front of queue
{
return queArray[front];
}
// --------------------------------------------------------------
public boolean isEmpty() // true if queue is empty
{
return (nItems == 0);
}
// --------------------------------------------------------------
public boolean isFull() // true if queue is full
{
return (nItems == maxSize);
}
// --------------------------------------------------------------
public int size() // number of items in queue
{
return nItems;
}
// --------------------------------------------------------------
// method to remove and return second element, assuming queue has at least 2
// elements
public long removeSecond() {
// taking a backup of current front element
long front_data = queArray[front];
// advancing front index, wrapping around if necessary
front = (front + 1) % maxSize;
// taking a backup of data at current front index, which will be the
// second element
long second_data = queArray[front];
// replacing current front element with previous front element
queArray[front] = front_data;
// updating nItems
nItems--;
// returning removed data
return second_data;
}
//method to print the queue elements
public void showQueue() {
int index = front;
for (int i = 0; i < nItems; i++) {
System.out.print(queArray[index] + " ");
index = (index + 1) % maxSize;
}
System.out.println();
}
} // end class Queue
/*OUTPUT*/
10 20 30 40
Removing 3 items
40
Inserting 4 more items
40 50 60 70 80
Calling removeSecond()
40 60 70 80