An Abstract Data Type (ADT) is a mathematical model for data types, defined by its behavior from the point of view of a user of the data. It is characterized by a set of values and a set of operations that can be performed on these values. The term ‘abstract’ is used because the data type provides an implementation-independent view. This means that the user of the data type doesn’t need to know how that data type is implemented, they only need to know what operations can be performed on it.
A stack is an ADT that allows users to push and pop elements onto and off a stack. The operations that can be performed on a stack include pushing an element onto the top of the stack, popping the top element from the stack, and checking whether the stack is empty.