This document provides an overview of stacks as an abstract data type (ADT). It defines a stack as a last-in first-out data structure for storing arbitrary objects. The key stack operations of push, pop, top, and size are described. Exceptions that can occur for empty stacks are discussed. An array-based implementation of stacks is presented, including algorithms for the stack operations and analysis of its performance and limitations. Applications of stacks like undo buffers and method call stacks are mentioned. Finally, an example of using a stack to check matching parentheses in an expression is provided.