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

1. a. Add the following operation to the class stackType. void reverseStack(stac

ID: 660922 • Letter: 1

Question

1. a. Add the following operation to the class stackType.

        void reverseStack(stackType<Type> &otherStack);

This operation copies the elements of a stack in reverse order onto another stack.

Consider the following statements:

        stackType<int> stack1;

        stackType<int> stack2;

The statement:

       stack1.reverseStack(stack2);

Copies the elements of stack1 onto stack2 in reverse order. That is, the top element of stack1 is the bottom element of stack2, and so on. The old contents of stack2 are destroyed, and stack1 is unchanged.

b. Write a test code to test the reverseStack() function

Here are the two codes provided:

//Header file: myStack.h

#ifndef H_StackType
#define H_StackType

#include <iostream>
#include <cassert>

#include "stackADT.h"

using namespace std;

template <class Type>
class stackType : public stackADT<Type>
{
public:
   const stackType<Type>& operator=(const stackType<Type>&);
   //Overload the assignment operator.

   void initializeStack();
   //Function to initialize the stack to an empty state.
   //Postcondition: stackTop = 0

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

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

   void push(const Type& newItem);
   //Function to add newItem to the stack.
   //Precondition: The stack exists and is not full.
   //Postcondition: The stack is changed and newItem
   // is added to the top of the stack.

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

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

   stackType(int stackSize = 100);
   //constructor
   //Create an array of the size stackSize to hold
   //the stack elements. The default stack size is 100.
   //Postcondition: The variable list contains the base
   // address of the array, stackTop = 0, and
   // maxStackSize = stackSize.

   stackType(const stackType<Type>& otherStack);
   //copy constructor

   ~stackType();
   //destructor
   //Remove all the elements from the stack.
   //Postcondition: The array (list) holding the stack
   // elements is deleted.

private:
   int maxStackSize; //variable to store the maximum stack size
   int stackTop; //variable to point to the top of the stack
   Type *list; //pointer to the array that holds the
   //stack elements

   void copyStack(const stackType<Type>& otherStack);
   //Function to make a copy of otherStack.
   //Postcondition: A copy of otherStack is created and
   // assigned to this stack.
};


template <class Type>
void stackType<Type>::initializeStack()
{
   stackTop = 0;
} //end initializeStack

template <class Type>
bool stackType<Type>::isEmptyStack() const
{
   return(stackTop == 0);
} //end isEmptyStack

template <class Type>
bool stackType<Type>::isFullStack() const
{
   return(stackTop == maxStackSize);
} //end isFullStack

template <class Type>
void stackType<Type>::push(const Type& newItem)
{
   if (!isFullStack())
   {
       list[stackTop] = newItem; //add newItem to the
       //top of the stack
       stackTop++; //increment stackTop
   }
   else
       cout << "Cannot add to a full stack." << endl;
}//end push

template <class Type>
Type stackType<Type>::top() const
{
   assert(stackTop != 0); //if stack is empty,
   //terminate the program
   return list[stackTop - 1]; //return the element of the
   //stack indicated by
   //stackTop - 1
}//end top

template <class Type>
void stackType<Type>::pop()
{
   if (!isEmptyStack())
       stackTop--; //decrement stackTop
   else
       cout << "Cannot remove from an empty stack." << endl;
}//end pop

template <class Type>
stackType<Type>::stackType(int stackSize)
{
   if (stackSize <= 0)
   {
       cout << "Size of the array to hold the stack must "
           << "be positive." << endl;
       cout << "Creating an array of size 100." << endl;

       maxStackSize = 100;
   }
   else
       maxStackSize = stackSize; //set the stack size to
   //the value specified by
   //the parameter stackSize

   stackTop = 0; //set stackTop to 0
   list = new Type[maxStackSize]; //create the array to
   //hold the stack elements
}//end constructor

template <class Type>
stackType<Type>::~stackType() //destructor
{
   delete[] list; //deallocate the memory occupied
   //by the array
}//end destructor

template <class Type>
void stackType<Type>::copyStack(const stackType<Type>& otherStack)
{
   delete[] list;
   maxStackSize = otherStack.maxStackSize;
   stackTop = otherStack.stackTop;

   list = new Type[maxStackSize];

   //copy otherStack into this stack
   for (int j = 0; j < stackTop; j++)
       list[j] = otherStack.list[j];
} //end copyStack


template <class Type>
stackType<Type>::stackType(const stackType<Type>& otherStack)
{
   list = nullptr;

   copyStack(otherStack);
}//end copy constructor

template <class Type>
const stackType<Type>& stackType<Type>::operator=
(const stackType<Type>& otherStack)
{
   if (this != &otherStack) //avoid self-copy
       copyStack(otherStack);

   return *this;
} //end operator=   

#endif

//Header file: stackADT.h

#ifndef H_StackADT
#define H_StackADT

template <class Type>
class stackADT
{
public:
   virtual void initializeStack() = 0;
   //Method to initialize the stack to an empty state.
   //Postcondition: Stack is empty

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

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

   virtual void push(const Type& newItem) = 0;
   //Function to add newItem to the stack.
   //Precondition: The stack exists and is not full.
   //Postcondition: The stack is changed and newItem
   // is added to the top of the stack.

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

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

#endif

Explanation / Answer

comments are added

1)

//Here the implementation of reverse stack method
void reverseStack(stackType<Type>& otherStack)
{
//this is to display purpose
Type element;
// this tempostack is to store elements for temporary purpose while moving moving fromone stack to another stack for reversing
stackType<Type> tempostack;
//checking given stack is empty or not
while (otherStack.isEmptyStack() == false)
{
//taking top element and storing into temporary variable element
element = otherStack.top();
otherStack.pop();
//pushing back to temporary stack that we declared
tempostack.push(element);
}

//now intechanging stack here to get reversed elements in stack

otherStack = tempostack;
return;
}

---------------------------------------------------------------------------

2)

stackType<int> otherStack;

// lets push data into declared stack
otherStack.push(23);
otherStack.push(76);
otherStack.push(82);
otherStack.push(12);
otherStack.push(137);
otherStack.push(268);
otherStack.push(97);
//then calling function
reverseStack(otherStack);

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Chat Now And Get Quote