Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Hi, I need help with this assignment. Only answer this problem if you know how t

ID: 3861361 • Letter: H

Question

Hi, I need help with this assignment. Only answer this problem if you know how to do so. Thanks

Modify the ArrayQueue class in the class to make the array queue capacity extendable.

Assuming the default queue capacity is 5.

ArrayQueue.h:

#pragma once

#include <stdexcept>

using namespace std;

template <typename E>

class ArrayQueue {

       enum { DEF_CAPACITY = 100 };             // default queue capacity

public:

       ArrayQueue(int cap = DEF_CAPACITY);             // constructor from capacity

       int size() const;                        // number of items in the stack

       bool empty() const;                      // is the stack empty?

       const E& front() const;    // get the top element

       void enqueue(const E& e); // add to back of queue

       void dequeue();                          // remove from front of queue

       void printAll();                                // print all elements on stack to cout

private:                                // member data

       E* Q;                             // array of queue elements

       int capacity;              // queue capacity

       int f;                            // index of the front of the queue

       int r;                            // index of the rear of the queue

       int n;                            // number of elements

};

template <typename E> ArrayQueue<E>::ArrayQueue(int cap)

       : Q(new E[cap]), capacity(cap), f(0), r(0), n(0) { }   // constructor from capacity

template <typename E> int ArrayQueue<E>::size() const

{

       return n;

}                          // number of items in the queue

template <typename E> bool ArrayQueue<E>::empty() const

{

       return (n == 0);

}                          // is the stack empty?

template <typename E>                           // return element at front of queue

const E& ArrayQueue<E>::front() const {

       if (empty()) throw length_error("front of empty queue");

       return Q[f];

}

template <typename E>                           // insert element to back of queue

void ArrayQueue<E>::enqueue(const E& e) {

       if (size() == capacity) throw length_error("enqueue to full queue");

       Q[r] = e;

       r = (r + 1) % capacity;

       n++;

}

template <typename E>                           // remove element at front of queue

void ArrayQueue<E>::dequeue() {

       if (empty()) throw length_error("enqueue from empty queue");

       f = (f + 1) % capacity;

       n--;

}

// print all elements on queue

template <typename E>

void ArrayQueue<E>::printAll() {

       if (empty()) throw length_error("Empty queue");

       cout << "Elements in queue: ";

       int front = f;

       for (int i = 0; i < n; i++) {

              cout << "{" << Q[front] << "} ";

              front = (front + 1) % capacity;

       }

       cout << endl;

}

You only need to write and show the C++ codes to implement the below two functions:

a.    void resize(int N);

This function resizes the current queue array capacity to N.

b.    void enqueue(const E& e);

This function appends a new element to the back of the queue. If the queue is full then it calls the resize function to double the current capacity and then en-queue the new element to the new capacity queue.

Example of an Extendable Array Queue Class declaration:

template <typename E>

class ExtArrayQueue {

       enum { DEF_CAPACITY = 5 };        // default queue capacity

public:

       ExtArrayQueue(int cap = DEF_CAPACITY);   // constructor from capacity

       int size() const;          // number of items in the queue

       bool empty() const;        // is the queue empty?

       const E& front() const;    // get the front element

       void enqueue(const E& e); // add to back of queue

       void dequeue();            // remove from front of queue

       void printAll();           // print all elements in the queue

      

Private:

void resize(int N);        // resize the array to size N

       E* Q;                      // array of queue elements

       int capacity;              // queue capacity

       int f;                     // index of the front of the queue

       int r;                     // index of the rear of the queue

       int n;                     // number of elements

};

#pragma once

#include <stdexcept>

using namespace std;

template <typename E>

class ArrayQueue {

       enum { DEF_CAPACITY = 100 };             // default queue capacity

public:

       ArrayQueue(int cap = DEF_CAPACITY);             // constructor from capacity

       int size() const;                        // number of items in the stack

       bool empty() const;                      // is the stack empty?

       const E& front() const;    // get the top element

       void enqueue(const E& e); // add to back of queue

       void dequeue();                          // remove from front of queue

       void printAll();                                // print all elements on stack to cout

private:                                // member data

       E* Q;                             // array of queue elements

       int capacity;              // queue capacity

       int f;                            // index of the front of the queue

       int r;                            // index of the rear of the queue

       int n;                            // number of elements

};

template <typename E> ArrayQueue<E>::ArrayQueue(int cap)

       : Q(new E[cap]), capacity(cap), f(0), r(0), n(0) { }   // constructor from capacity

template <typename E> int ArrayQueue<E>::size() const

{

       return n;

}                          // number of items in the queue

template <typename E> bool ArrayQueue<E>::empty() const

{

       return (n == 0);

}                          // is the stack empty?

template <typename E>                           // return element at front of queue

const E& ArrayQueue<E>::front() const {

       if (empty()) throw length_error("front of empty queue");

       return Q[f];

}

template <typename E>                           // insert element to back of queue

void ArrayQueue<E>::enqueue(const E& e) {

       if (size() == capacity) throw length_error("enqueue to full queue");

       Q[r] = e;

       r = (r + 1) % capacity;

       n++;

}

template <typename E>                           // remove element at front of queue

void ArrayQueue<E>::dequeue() {

       if (empty()) throw length_error("enqueue from empty queue");

       f = (f + 1) % capacity;

       n--;

}

// print all elements on queue

template <typename E>

void ArrayQueue<E>::printAll() {

       if (empty()) throw length_error("Empty queue");

       cout << "Elements in queue: ";

       int front = f;

       for (int i = 0; i < n; i++) {

              cout << "{" << Q[front] << "} ";

              front = (front + 1) % capacity;

       }

       cout << endl;

}

Explanation / Answer

void resize(int N)
{
       E[] tmp = (E[]) new object[N];

       int current = front;
       for (int i = 0; i < count; i++)
       {
           tmp[i] = elements[current];
           current = (current + 1) % count;
       }
       elements = tmp;

Q = elements;

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote