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.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.