// Array-based stack implementation template class AStack: public Stack { private: int maxSize; // Maximum size of stack int top; // Index for top element Elem *listArray; // Array holding stack elements public: AStack(int size =DefaultListSize) // Constructor { maxSize = size; top = 0; listArray = new Elem[size]; } ~AStack() { delete [] listArray; } // Destructor void clear() { top = 0; } // Reinitialize bool push(const Elem& it) { // Put it on stack if (top == maxSize) return false; // Stack is full else { listArray[top++] = it; return true; } } bool pop(Elem& it) { // Pop top element if (top == 0) return false; else { it = listArray[--top]; return true; } } bool topValue(Elem& it) const { // Return top element if (top == 0) return false; else { it = listArray[top-1]; return true; } } int length() const { return top; } // Return length };