An abstract data type (ADT) is a mathematical model for data structures that defines the type solely by the operations that can be performed on it. For example, a stack ADT can be defined by two operations: push, which inserts an item into the stack, and pop, which removes the top item. Abstract data types are theoretical entities used to simplify algorithm descriptions and formally describe programming language type systems. A stack is a linear data structure that follows the last-in, first-out principle, where items can only be inserted or removed from one end of the stack. Stacks have common applications in arithmetic expression evaluation, backtracking, and function call processing.