Data Structure | Unit Test | Performance Test | API Documentation | Implemented |
---|---|---|---|---|
Binary Tree | Binary Tree | |||
Binary Search Tree (BST) | BST | |||
AVL Tree | AVLTree | |||
Tree Multiset | TreeMultiset | |||
Segment Tree | SegmentTree | |||
Binary Indexed Tree | BinaryIndexedTree | |||
Graph | AbstractGraph | |||
Directed Graph | DirectedGraph | |||
Undirected Graph | UndirectedGraph | |||
Linked List | SinglyLinkedList | |||
Singly Linked List | SinglyLinkedList | |||
Doubly Linked List | DoublyLinkedList | |||
Queue | Queue | |||
Object Deque | ObjectDeque | |||
Array Deque | ArrayDeque | |||
Stack | Stack | |||
Coordinate Set | CoordinateSet | |||
Coordinate Map | CoordinateMap | |||
Heap | Heap | |||
Priority Queue | PriorityQueue | |||
Max Priority Queue | MaxPriorityQueue | |||
Min Priority Queue | MinPriorityQueue | |||
Trie | Trie |
Data Structure | Data Structure Typed | C++ std | java.util | Python collections |
---|---|---|---|---|
Dynamic Array | Array<E> | vector<T> | ArrayList<E> | list |
Linked List | DoublyLinkedList<E> | list<T> | LinkedList<E> | deque |
Singly Linked List | SinglyLinkedList<E> | - | - | - |
Set | Set<E> | set<T> | HashSet<E> | set |
Map | Map<K, V> | map<K, V> | HashMap<K, V> | dict |
Ordered Dictionary | Map<K, V> | - | - | OrderedDict |
Queue | Queue<E> | queue<T> | Queue<E> | - |
Priority Queue | PriorityQueue<E> | priority_queue<T> | PriorityQueue<E> | - |
Heap | Heap<V> | priority_queue<T> | PriorityQueue<E> | heapq |
Stack | Stack<E> | stack<T> | Stack<E> | - |
Deque | Deque<E> | deque<T> | - | - |
Trie | Trie | - | - | - |
Unordered Map | HashMap<K, V> | unordered_map<K, V> | HashMap<K, V> | defaultdict |
Multiset | - | multiset<T> | - | - |
Multimap | - | multimap<K, V> | - | - |
Binary Tree | BinaryTree<K, V> | - | - | - |
Binary Search Tree | BST<K, V> | - | - | - |
Directed Graph | DirectedGraph<V, E> | - | - | - |
Undirected Graph | UndirectedGraph<V, E> | - | - | - |
Unordered Multiset | - | unordered_multiset | - | Counter |
Linked Hash Set | - | - | LinkedHashSet<E> | - |
Linked Hash Map | - | - | LinkedHashMap<K, V> | - |
Sorted Set | AVLTree<E> | - | TreeSet<E> | - |
Sorted Map | AVLTree<K, V> | - | TreeMap<K, V> | - |
Tree Set | AVLTree<E> | set | TreeSet<E> | - |
Unordered Multimap | - | unordered_multimap<K, V> | - | - |
Bitset | - | bitset<N> | - | - |
Unordered Set | - | unordered_set<T> | HashSet<E> | - |
Big O Notation | Type | Computations for 10 elements | Computations for 100 elements | Computations for 1000 elements |
---|---|---|---|---|
O(1) | Constant | 1 | 1 | 1 |
O(log N) | Logarithmic | 3 | 6 | 9 |
O(N) | Linear | 10 | 100 | 1000 |
O(N log N) | n log(n) | 30 | 600 | 9000 |
O(N^2) | Quadratic | 100 | 10000 | 1000000 |
O(2^N) | Exponential | 1024 | 1.26e+29 | 1.07e+301 |
O(N!) | Factorial | 3628800 | 9.3e+157 | 4.02e+2567 |
Data Structure | Access | Search | Insertion | Deletion | Comments |
---|---|---|---|---|---|
Array | 1 | n | n | n | |
Stack | n | n | 1 | 1 | |
Queue | n | n | 1 | 1 | |
Linked List | n | n | 1 | n | |
Hash Table | - | n | n | n | In case of perfect hash function costs would be O(1) |
Binary Search Tree | n | n | n | n | In case of balanced tree costs would be O(log(n)) |
B-Tree | log(n) | log(n) | log(n) | log(n) | |
Red-Black Tree | log(n) | log(n) | log(n) | log(n) | |
AVL Tree | log(n) | log(n) | log(n) | log(n) | |
Bloom Filter | - | 1 | 1 | - | False positives are possible while searching |
Name | Best | Average | Worst | Memory | Stable | Comments |
---|---|---|---|---|---|---|
Bubble sort | n | n2 | n2 | 1 | Yes | |
Insertion sort | n | n2 | n2 | 1 | Yes | |
Selection sort | n2 | n2 | n2 | 1 | No | |
Heap sort | n log(n) | n log(n) | n log(n) | 1 | No | |
Merge sort | n log(n) | n log(n) | n log(n) | n | Yes | |
Quick sort | n log(n) | n log(n) | n2 | log(n) | No | Quicksort is usually done in-place with O(log(n)) stack space |
Shell sort | n log(n) | depends on gap sequence | n (log(n))2 | 1 | No | |
Counting sort | n + r | n + r | n + r | n + r | Yes | r - biggest number in array |
Radix sort | n * k | n * k | n * k | n + k | Yes | k - length of longest key |