A stack is an abstract data type that follows LIFO (last in, first out) principle. Elements can only be inserted or removed from one end, called the top. Common operations on a stack include push to add an element and pop to remove the top element. Stacks have many applications like reversing a word or parsing expressions. They can be implemented using arrays or linked lists. The time complexity of push, pop, and top operations is O(1) while search is O(n).