Data Structures and algorithms are the basis of software engineering.
We can think of data structures as ways to organize data in order to implement abstractions. We can think of algorithms as instructions to give predictable outcomes based on a given input.
- Arrays
- Dinamic Arrays (Vectors)
- Queues
- Stacks
- Linked Lists
- Singly Linked Lists
- Doubly Linked Lists
- Circular Linked Lists
- Skip List
- Graphs
- Trees
- Binary Trees
- Binary Search Trees
- AVL Trees
- Red Black Trees
- B-Tree
- Splay Tree
- KD Tree
- Cartesian Tree
- Tries
- Hash Table
- Sorting Algorithms
- Bubble Sort
- Insertion
- Merge Sort
- Quicksort
- Timsort
- Heapsort
- Selection Sort
- Tree Sort
- Shell Sort
- Bucket Sort
- Radix Sort
- Counting Sort
- Cubesort
- Constant Complexity O(1)
- Log Complexity O(log(n))
- Linear Complexity O(n)
- NLog Complexity O(NLog(N))
- Quadratic Complexity O( N2 )
- Cubic Complexity O( N3 )
- Exponential Complexity O( CN )
- Factorial Complexity O(N!)