A stack is a linear data structure that follows the LIFO (last-in, first-out) principle for adding and removing items. It allows push and pop operations at one end called the top. Common stack operations include push to add an item to the top, pop to remove the top item, peek to view the top item without removing it, and functions to check if the stack is empty or full. Stacks have applications in expression evaluation, backtracking, recursion, undo/redo operations, and graph searches like depth-first search. Recursive functions work by calling themselves during execution and are useful for implementing stacks.