Stacks are linear data structures that follow the LIFO (last in, first out) principle. Elements are added and removed from the top of the stack. Stacks have two main operations - Push, which adds an element to the top of the stack, and Pop, which removes an element from the top. Stacks can be implemented using arrays or linked lists. Compilers use stacks to convert infix arithmetic expressions to postfix notation and then evaluate the postfix expression. This process involves pushing and popping operators from the stack.