// tstack1.h // Class template Stack #ifndef TSTACK1_H #define TSTACK1_H template< class T, int elements > // # of elements in the stack class Stack { public: Stack(); // default constructor // ~Stack() { delete [] stackPtr; } // destructor (only for dynamic version) bool push( const T& ); // push an element onto the stack bool pop( T& ); // pop an element off the stack private: int top; // location of the top element T stackHolder[elements]; // static array for stack // T *stackPtr; // pointer to the stack (only for dynamic version) bool isEmpty() const { return top == -1; } // utility bool isFull() const { return top == elements - 1; } // functions }; // Constructor with default size 10 template< class T, int elements > Stack< T, elements>::Stack() { top = -1; // Stack is initially empty // stackPtr = new T[ elements ]; // dynamically allocate space for elements (not used) } // Push an element onto the stack // return 1 if successful, 0 otherwise template< class T, int elements > bool Stack< T, elements >::push( const T &pushValue ) { if ( !isFull() ) { stackHolder[ ++top ] = pushValue; // place item in Stack return true; // push successful } return false; // push unsuccessful } // Pop an element off the stack template< class T, int elements > bool Stack< T, elements >::pop( T &popValue ) { if ( !isEmpty() ) { popValue = stackHolder[ top-- ]; // remove item from Stack return true; // pop successful } return false; // pop unsuccessful } #endif