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

Just need to show the two functions for the answer: You only need to write and s

ID: 3862572 • Letter: J

Question

Just need to show the two functions for the answer:

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

Dear friend,

you may want to implement like this.

To resize the queue

//create new temporary queue

            E[] tmp = (E[]) new Object[newCap];

//copy current queue elements

           int current = front;

           for (int i = 0; i < size; i++)

              {

              tmp[i] = Q[current];

              current = (current + 1) % count;

              }

         Q = tmp;

           }

   if (size() == capacity)

{

//resize the queue

resize(2*capacity);

}

   Q[r] = e;

   r = (r + 1) % capacity;

   n++;

}

Here I have just given required methods, you may need to include them in your code.

To understand functioning of method I have desired comments .

Hope this heps you.