A stack is a linear, non-primitive data structure that follows the last in, first out (LIFO) principle. It allows for two main operations - push, which adds an element to the top of the stack, and pop, which removes the topmost element. Some key applications of stacks include back/forward buttons in web browsers, undo/redo functions, evaluating arithmetic expressions, and enabling recursion.