A stack is a last-in, first-out data structure where only the top element can be accessed. Elements can be added with push() and removed with pop(). Stacks have various implementations including arrays, vectors, and linked lists. Arrays have fixed size but best performance while vectors grow dynamically but may be slow if resizing. Linked lists allow constant time push/pop but are generally slower. Stacks have many applications including parsing with delimiters, operating system function calls, reverse polish notation calculators, and pathfinding algorithms.