Question

In: Computer Science

QUEUEBOX: Using an Array of initial size of five (5) for storage, start with the following...

QUEUEBOX:

Using an Array of initial size of five (5) for storage, start with the following generic class declaration for QueueBox:

public class QueueBox<E> {
private E[] elements = (E[])( new Object[5] );
private int front_idx = 0;
private int rear_idx = 0;
private int count = 0;
}

Hint: use the count variable to keep track of how many elements are in the queue (increment count when enqueing and decrement when dequeing). Makes it a lot easier to determine if the array is full and for the other functions as well.

Of course you may add or modify variables to this class BUT you MUST use a GENERIC array of initial size 5 and your queue MUST be a circular queue. Ensure your QueueBox can do the following:

boolean add(E e)
Adds e to the queue (enqueue). returns true. Throws NullPointerException if e is null.

E remove()
Removes element in the front of the queue (dequeue) and returns it. NoSuchElementException is thrown if this queue is empty

E element()
Retrieves, but does not remove, the head of the queue. Throws NoSuchElementException - if the queue is empty.

boolean isEmpty()
returns true if queue is empty.

int size()
returns number of elements held in the queue.

Create a driver class QueueBoxDriver that creates an instance of QueueBox<Integer> then fills it with 60,000 integers numbered from 0 to 59999 (in that order). Your QueueBox must be able to resize itself (double in size) when needed to accomodate. Everytime your queue auto-resizes it must display that it has done so (see output below). After you create your queue and populate it, dequeue the first 50000 elements.

Now dequeue the remaining 10000 elements and display them to the screen. Continue until the queue is empty. Your output should look as close as possible to this:

OUTPUT:
Array resized to 10
Array resized to 20
Array resized to 40
Array resized to 80
Array resized to 160
Array resized to 320
Array resized to 640
Array resized to 1280
Array resized to 2560
Array resized to 5120
Array resized to 10240
Array resized to 20480
Array resized to 40960
Array resized to 81920
50000
50001
50002
50003
50004
50005
50006
...

...

...
59997
59998
59999

Marking Criteria

Correct implementation of a queue with generic queue methods ... 5

Working implementation of a circular queue ... 10

Automatic resizing of the queue ... 3

Correct output ... 2

Solutions

Expert Solution

/////////////////////    QueueBox class     /////////////////////////

/**

*

* Queue Box class to implement resizable circular array

*/

import java.util.NoSuchElementException;

public class QueueBox<E> {

    private E[] elements = (E[])( new Object[5] );

    private int front_idx = 0;

    private int rear_idx = 0;

    private int count = 0;

    private int size=5;

    

    /** Defining constructor to set front and rear indexes are -1 to notify that there are no elements initially*/

QueueBox(){

    front_idx =-1;     

    rear_idx=-1;

}    

boolean add  (E e){

    /** Throws null pointer exception if e is null */

    if(e==null){

        throw new NullPointerException();

    }

    /** check if whether elements are filled to maximum capacity

     * if yes increase the size of array by twice

     */

    if((rear_idx==size-1 && front_idx==0)||(rear_idx==front_idx-1)){

        size=2*size;

        E[] temp = (E[])( new Object[2*size]);

        for(int i=0;i<count;i++){                                  // moving elements of old array to new array

            temp[i]=elements[i];

        }

        elements =temp;                                           // pointing element to new array

        System.out.println("Array resized to " + size);             //printing out that array is resized

    }

    

    if(front_idx==-1){                  // if initially the array is empty set front index to zero

        front_idx=0;

    }

    elements[++rear_idx]=e;

    count++;

    return true;

}

E remove(){

    /** throw exception if array is empty

     *  we can use either front_idx ==-1 or count==0 or isempty to check if the array is empty

     */

    if(front_idx==-1){

        throw new NoSuchElementException();

    }

    E temp = elements[front_idx];

    /**

     * if front_idx == rear_idx set them to -1 stating that no elemnt is there in array

     */

    if(front_idx == rear_idx){

        front_idx=-1;

        rear_idx=-1;

    }

    else if(front_idx == size-1){

    front_idx=0;

    }

    else{

        front_idx++;     // increment front index after every dequeue to point to next element in queue

    }

    count--;

    return temp;

}

E element(){

    /**

     * if there is an element returns element

     * if not throws exception

     */

    if(count==0){

        throw new NoSuchElementException();

    }

    return elements[front_idx];

}

boolean isEmpty(){

    if(count==0){

        return true;

    }

    return false;

}

int size(){

    return count;

}

}

//////////////////////////////////////// tester code   ///////////////////////

public class tester {

    public static void main(String[] args ) {

        QueueBox<Integer> queue= new QueueBox<Integer>();    // creating an instance of QueueBox and naming it as queue

        for(int i=0;i<60000;i++){                           // adding 60000 elements to queue

            queue.add(i);

        }

        for(int i=0;i<50000;i++){           //removing 50000 elements from queue

            queue.remove();

        }

        while(!queue.isEmpty()){

            System.out.println(queue.remove());      // printing remaining elements of queue by dequeue

        }

        

    }

    

}


Related Solutions

QUEUEBOX: Using an Array of initial size of five (5) for storage, start with the following...
QUEUEBOX: Using an Array of initial size of five (5) for storage, start with the following generic class declaration for QueueBox: public class QueueBox<E> { private E[] elements = (E[])( new Object[5] ); private int front_idx = 0; private int rear_idx = 0; private int count = 0; } Hint: use the count variable to keep track of how many elements are in the queue (increment count when enqueing and decrement when dequeing). Makes it a lot easier to determine...
Implement a Bag ADT using Dynamic Array structure as underlying data storage for Bag ADT. RESTRICTIONS:...
Implement a Bag ADT using Dynamic Array structure as underlying data storage for Bag ADT. RESTRICTIONS: Not allowed to use ANY built-in Python data structures and their methods. You must solve by importing the DynamicArray class and using class methods to write solution. Also not allowed to directly access any variables of the DynamicArray class (like self.size, self.capacity and self.data in part 1). All work must be done by only using class methods. Below is the Bag ADT starter code...
Please enter a seed: 1 Please enter the size of the array: 1 Array size must...
Please enter a seed: 1 Please enter the size of the array: 1 Array size must be greater than 1. Please reenter: 0 Array size must be greater than 1. Please reenter: -1 Array size must be greater than 1. Please reenter: 12 Please choose an option: 1 Print the array 2 Find the average 3 Find the largest element 4 Count how many times 3 occurred 5 Count how many elements are less than half of the first element...
Assume you have a stack and a queue implemented using an array of size 4. show...
Assume you have a stack and a queue implemented using an array of size 4. show the content of the array for the stack (then the queue) for the following operations: (for the queue replace push by add and pop by remove; keep in mind that the queue uses a circular array): push(-3), push(-5), push(-9), push(-10), pop(), pop(), push(-13), pop(), push( -15), push(-17). java code
Using Selection Sort on an any array of size 7, what will be the minimum/maximum number...
Using Selection Sort on an any array of size 7, what will be the minimum/maximum number of comparisons and number of exchanges? 1 for i = 1 to A.length-1 2 for j = i+1 to A.length 3 if A[j] < A[i] 4 exchange A[i] with A[j]
A wine lover has decided to start a winery. The initial investment will be $5 million...
A wine lover has decided to start a winery. The initial investment will be $5 million on Day 1. The winery will require an additional $1 million dollars investment at very beginning Year 1. The vines will mature over five years. Beginning at the end of year 6, the winery is expected to produce net cash inflows of $2 million, 4 mil in year 7, 6 mil in year 8, 8 mil in year 9 and 10 mil in year...
1) Write a function searchValue that accepts an array of integers, the size of the array,...
1) Write a function searchValue that accepts an array of integers, the size of the array, and an integer. Find the last occurrence of the integer passed in as an input argument in the array. Return the index of the last occurrence of the value. If the value is not found, return a -1 2) Write the line of code to call the previous function assuming you have an array vec with length n, and are looking for the number...
We have an array A of size n. There are only positive integers in this array....
We have an array A of size n. There are only positive integers in this array. Note that the array may have integers that are not distinct, and it could be any array of positive integers in creation (I like the numbers found the decimal expansion of π for instance). When possible provide the exact complexity of the algorithm. If it’s not possible explain the O/Ω/Θ complexity. a. Design an efficient algorithm to find the maximum difference between any two...
We have an array A of size n. There are only positive integers in this array....
We have an array A of size n. There are only positive integers in this array. Note that the array may have integers that are not distinct, and it could be any array of positive integers in creation (I like the numbers found the decimal expansion of π for instance). When possible provide the exact complexity of the algorithm. If it’s not possible explain the O/Ω/Θ complexity. a. Design an efficient algorithm to find the maximum difference between any two...
c++ I need a code that will fill an array size of 1000, an array of...
c++ I need a code that will fill an array size of 1000, an array of size 2000, and an array size of 10000, with random int values. Basically like this: array1[1000] = filled all with random numbers array2[2000] = filled all with random numbers array3[10000] = filled all with random numbers C++ no need for print
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT