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

17.3)<in C++>Write the definition of the function moveNthFront that takes as a p

ID: 3832533 • Letter: 1

Question

17.3)<in C++>Write the definition of the function moveNthFront that takes as a parameter a positive integer, n. The function moves the nth element of the queue to the front. The order of the remaining elements remains unchanged. For example, suppose:

queue = {5, 11, 34, 67, 43, 55} and n = 3.

After a call to the function moveNthFront:

queue = {34, 5, 11, 67, 43, 55}.

having trouble with the test program heres what i have so far:

Add this function the the class queueType and write a program to test your method.

below is queueType and queueADT which im assuming it needs too run:

//Header file: stackADT.h

#ifndef H_queueADT
#define H_queueADT

template
class queueADT
{
public:
    virtual bool isEmptyQueue() const = 0;
      //Function to determine whether the queue is empty.
      //Postcondition: Returns true if the queue is empty,
      //               otherwise returns false.

    virtual bool isFullQueue() const = 0;
      //Function to determine whether the queue is full.
      //Postcondition: Returns true if the queue is full,
      //               otherwise returns false.

    virtual void initializeQueue() = 0;
      //Function to initialize the queue to an empty state.
      //Postcondition: The queue is empty.

    virtual Type front() const = 0;
      //Function to return the first element of the queue.
      //Precondition: The queue exists and is not empty.
      //Postcondition: If the queue is empty, the program
      //               terminates; otherwise, the first
      //               element of the queue is returned.

    virtual Type back() const = 0;
      //Function to return the last element of the queue.
      //Precondition: The queue exists and is not empty.
      //Postcondition: If the queue is empty, the program
      //               terminates; otherwise, the last
      //               element of the queue is returned.

    virtual void addQueue(const Type& queueElement) = 0;
      //Function to add queueElement to the queue.
      //Precondition: The queue exists and is not full.
      //Postcondition: The queue is changed and queueElement
      //               is added to the queue.

    virtual void deleteQueue() = 0;
      //Function to remove the first element of the queue.
      //Precondition: The queue exists and is not empty.
      //Postcondition: The queue is changed and the first
      //               element is removed from the queue.
};


#endif

//Header file QueueAsArray

#ifndef H_QueueAsArray
#define H_QueueAsArray

#include
#include

#include "queueADT.h"

using namespace std;

template
class queueType: public queueADT
{
public:
    const queueType& operator=(const queueType&);
      //Overload the assignment operator.

    bool isEmptyQueue() const;
      //Function to determine whether the queue is empty.
      //Postcondition: Returns true if the queue is empty,
      //               otherwise returns false.

    bool isFullQueue() const;
      //Function to determine whether the queue is full.
      //Postcondition: Returns true if the queue is full,
      //               otherwise returns false.

    void initializeQueue();
      //Function to initialize the queue to an empty state.
      //Postcondition: The queue is empty.

    Type front() const;
      //Function to return the first element of the queue.
      //Precondition: The queue exists and is not empty.
      //Postcondition: If the queue is empty, the program
      //               terminates; otherwise, the first
      //               element of the queue is returned.
    Type back() const;
      //Function to return the last element of the queue.
      //Precondition: The queue exists and is not empty.
      //Postcondition: If the queue is empty, the program
      //               terminates; otherwise, the last
      //               element of the queue is returned.

    void addQueue(const Type& queueElement);
      //Function to add queueElement to the queue.
      //Precondition: The queue exists and is not full.
      //Postcondition: The queue is changed and queueElement
      //               is added to the queue.

    void deleteQueue();
      //Function to remove the first element of the queue.
      //Precondition: The queue exists and is not empty.
      //Postcondition: The queue is changed and the first
      //               element is removed from the queue.

    queueType(int queueSize = 100);
      //Constructor

    queueType(const queueType& otherQueue);
      //Copy constructor

    ~queueType();
      //Destructor

private:
    int maxQueueSize; //variable to store the maximum queue size
    int count;        //variable to store the number of
                      //elements in the queue
    int queueFront;   //variable to point to the first
                      //element of the queue
    int queueRear;    //variable to point to the last
                      //element of the queue
    Type *list;       //pointer to the array that holds
                      //the queue elements
};

template
bool queueType::isEmptyQueue() const
{
    return (count == 0);
} //end isEmptyQueue

template
bool queueType::isFullQueue() const
{
    return (count == maxQueueSize);
} //end isFullQueue

template
void queueType::initializeQueue()
{
    queueFront = 0;
    queueRear = maxQueueSize - 1;
    count = 0;
} //end initializeQueue

template
Type queueType::front() const
{
    assert(!isEmptyQueue());
    return list[queueFront];
} //end front

template
Type queueType::back() const
{
    assert(!isEmptyQueue());
    return list[queueRear];
} //end back

template
void queueType::addQueue(const Type& newElement)
{
    if (!isFullQueue())
    {
        queueRear = (queueRear + 1) % maxQueueSize; //use mod
                            //operator to advance queueRear
                            //because the array is circular
        count++;
        list[queueRear] = newElement;
    }
    else
        cout << "Cannot add to a full queue." << endl;
} //end addQueue

template
void queueType::deleteQueue()
{
    if (!isEmptyQueue())
    {
        count--;
        queueFront = (queueFront + 1) % maxQueueSize; //use the
                        //mod operator to advance queueFront
                        //because the array is circular
    }
    else
        cout << "Cannot remove from an empty queue." << endl;
} //end deleteQueue

    //Constructor
template
queueType::queueType(int queueSize)
{
    if (queueSize <= 0)
    {
        cout << "Size of the array to hold the queue must "
             << "be positive." << endl;
        cout << "Creating an array of size 100." << endl;

        maxQueueSize = 100;
    }
    else
        maxQueueSize = queueSize;   //set maxQueueSize to
                                    //queueSize

    queueFront = 0;                 //initialize queueFront
    queueRear = maxQueueSize - 1;   //initialize queueRear
    count = 0;
    list = new Type[maxQueueSize]; //create the array to
                                    //hold the queue elements
} //end constructor

    //Destructor
template
queueType::~queueType()
{
    delete [] list;
} //end destructor

template
const queueType& queueType::operator=
                       (const queueType& otherQueue)
{
    cout << "Write the definition of the function "
         << "to overload the assignment operator." << endl;
} //end assignment operator

template
queueType::queueType(const queueType& otherQueue)
{
    cout << "Write the definition of the copy constructor."
         << endl;
} //end copy constructor

#endif

heres the implementation for moveNthFront its not currently in the file above:

void queueType::moveNthFront(int n){

   // base case
   if(isEmptyQueue())
       return;

   if(n > count){
       return;
   }

   int k = queueFront;
   for(int i=1; i<= n; i++){

       k = (k+1)%maxQueueSize;
   }

   // now k points to nth element from front

   // moving all elements from front to k by right
   // storign nth element
   Type nth = list[k];
   for(int i=k; k>queueFront; k--){

       int before = (k-1+maxQueueSize)%maxQueueSize;
       list[k] = list[before];
   }

   // copying nth at front
   list[queueFront] = nth;
}

Explanation / Answer

Hi, I have moved required method inside class.

#include <iostream>
#include <cstdlib>

#include "queueADT.h"
using namespace std;
template
class queueType: public queueADT
{
public:
const queueType& operator=(const queueType&);
//Overload the assignment operator.
bool isEmptyQueue() const;
//Function to determine whether the queue is empty.
//Postcondition: Returns true if the queue is empty,
// otherwise returns false.
bool isFullQueue() const;
//Function to determine whether the queue is full.
//Postcondition: Returns true if the queue is full,
// otherwise returns false.
void initializeQueue();
//Function to initialize the queue to an empty state.
//Postcondition: The queue is empty.
Type front() const;
//Function to return the first element of the queue.
//Precondition: The queue exists and is not empty.
//Postcondition: If the queue is empty, the program
// terminates; otherwise, the first
// element of the queue is returned.
Type back() const;
//Function to return the last element of the queue.
//Precondition: The queue exists and is not empty.
//Postcondition: If the queue is empty, the program
// terminates; otherwise, the last
// element of the queue is returned.
void addQueue(const Type& queueElement);
//Function to add queueElement to the queue.
//Precondition: The queue exists and is not full.
//Postcondition: The queue is changed and queueElement
// is added to the queue.
void deleteQueue();
//Function to remove the first element of the queue.
//Precondition: The queue exists and is not empty.
//Postcondition: The queue is changed and the first
// element is removed from the queue.
queueType(int queueSize = 100);
//Constructor
queueType(const queueType& otherQueue);
//Copy constructor
~queueType();
//Destructor

void moveNthFront(int n);
private:
int maxQueueSize; //variable to store the maximum queue size
int count; //variable to store the number of
//elements in the queue
int queueFront; //variable to point to the first
//element of the queue
int queueRear; //variable to point to the last
//element of the queue
Type *list; //pointer to the array that holds
//the queue elements
};
template
bool queueType::isEmptyQueue() const
{
return (count == 0);
} //end isEmptyQueue
template
bool queueType::isFullQueue() const
{
return (count == maxQueueSize);
} //end isFullQueue
template
void queueType::initializeQueue()
{
queueFront = 0;
queueRear = maxQueueSize - 1;
count = 0;
} //end initializeQueue
template
Type queueType::front() const
{
assert(!isEmptyQueue());
return list[queueFront];
} //end front
template
Type queueType::back() const
{
assert(!isEmptyQueue());
return list[queueRear];
} //end back
template
void queueType::addQueue(const Type& newElement)
{
if (!isFullQueue())
{
queueRear = (queueRear + 1) % maxQueueSize; //use mod
//operator to advance queueRear
//because the array is circular
count++;
list[queueRear] = newElement;
}
else
cout << "Cannot add to a full queue." << endl;
} //end addQueue
template
void queueType::deleteQueue()
{
if (!isEmptyQueue())
{
count--;
queueFront = (queueFront + 1) % maxQueueSize; //use the
//mod operator to advance queueFront
//because the array is circular
}
else
cout << "Cannot remove from an empty queue." << endl;
} //end deleteQueue
//Constructor
template
queueType::queueType(int queueSize)
{
if (queueSize <= 0)
{
cout << "Size of the array to hold the queue must "
<< "be positive." << endl;
cout << "Creating an array of size 100." << endl;
maxQueueSize = 100;
}
else
maxQueueSize = queueSize; //set maxQueueSize to
//queueSize
queueFront = 0; //initialize queueFront
queueRear = maxQueueSize - 1; //initialize queueRear
count = 0;
list = new Type[maxQueueSize]; //create the array to
//hold the queue elements
} //end constructor
//Destructor
template
queueType::~queueType()
{
delete [] list;
} //end destructor
template
const queueType& queueType::operator=
(const queueType& otherQueue)
{
cout << "Write the definition of the function "
<< "to overload the assignment operator." << endl;
} //end assignment operator
template
queueType::queueType(const queueType& otherQueue)
{
cout << "Write the definition of the copy constructor."
<< endl;
} //end copy constructor
template
void queueType::moveNthFront(int n){
// base case
if(isEmptyQueue())
return;
if(n > count){
return;
}
int k = queueFront;
for(int i=1; i<= n; i++){
k = (k+1)%maxQueueSize;
}
// now k points to nth element from front
// moving all elements from front to k by right
// storign nth element
Type nth = list[k];
for(int i=k; k>queueFront; k--){
int before = (k-1+maxQueueSize)%maxQueueSize;
list[k] = list[before];
}
// copying nth at front
list[queueFront] = nth;
}

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