====== Data Structures ====== ===== Big O ===== * Finding all subsets of a set ''O(2^n)'' * Finding all permutations of a string ''O(n!)'' * Binary search ''O(log n)'' * Sorting using mergesort ''O(n log(n))'' * Iterating over all cells of a matrix (m,n) ''O(m*n)'' ==== Linked Lists ==== Singly Linked List time complexities * Search ''O(n)'' * Insert at head ''O(1)'' * Inset at tail ''O(1)'' * Remove at head ''O(1)'' * Remove at tail ''O(n)'' * Remove in middle ''O(n)'' Doubly Linked List time complexities * Search ''O(n)'' * Insert at head ''O(1)'' * Inset at tail ''O(1)'' * Remove at head ''O(1)'' * Remove at tail ''O(1)'' * Remove in middle ''O(n)'' ==== Stack ==== Usage examples * Undo mechanisms in text editors * Compiler syntax checking for matching brackets and braces * Can model pile of objects * Used behind the scenes to support recursion by keeping track of previous function calls * Depth First Search (DFS) on a graph Time complexity analysis (implemented using LinkedList) * Pushing ''O(1)'' * Popping ''O(1)'' * Peeking ''O(1)'' * Searching ''O(n)'' * Size ''O(1)'' ==== Queues ==== A queue is a linear data structure which models real world queues by having two primary operations ''enqueue'' and ''dequeue''. Usage * Any waiting line models (lineup at a movie theater, McDonald waiting numbers) * Can be used to keep track of the ''n'' most recently added elements * Web server request management where you want first come first serve * Breadth first search (BFS) graph traversal Time complexity analysis * Enqueue ''O(1)'' * Dequeue ''O(1)'' * Peeking ''O(1)'' * Contains ''O(n)'' * Removal ''O(n)'' * Is Empty ''O(1)''