A stack is a linear data structure that follows the LIFO (last in, first out) principle. Elements can only be inserted or removed from one end, called the top. Stacks have common operations like push to add an element and pop to remove the top element. Stacks have many applications including evaluating arithmetic expressions in postfix notation, implementing recursion, and solving puzzles like Towers of Hanoi. The document discusses stack implementations using arrays and linked lists and provides examples of stack applications.