A stack is a Last-In-First-Out (LIFO) data structure that allows insertion and deletion of elements exclusively from the top. It can be implemented statically using arrays or dynamically using linked lists, with operations such as push, pop, peep, and update. Stacks have various applications, including recursion and the evaluation of expressions using Polish notation.