# Data Structures and Algorithms (cs-101)

*This page is under construction. Currently these topics mostly exist as
slides. They'll be ported over as I move them into web formats.*

In this popular course you'll learn about and implement common data structures (like lists), algorithms (like binary search), and how to analyse the time and space complexity of both using mathematical methods. We'll also explore the use cases and trade-offs associated with each in the real world.

This course is very helpful for self-taught programmers who are preparing for technical interviews, and we go through a number of leetcode problems to prepare for interview formats.

*There are no pre-requisites for this course. A few topics might benefit from
math knowledge.*

## Topics

- Time Complexity, Space Complexity, and Big O Notation
- A Fresh Look at Arrays
- Sort algorithms
- Search algorithms
- Linear vs Binary Search
- Interpolation search
- Data distributions and search algorithms

- Hash-based data structures
- Associative Arrays
- Sets
- Dictionaries
- Hashing algorithms
- Dealing with hash collisions

- Node-based data structures
- Linked lists
- Double linked lists
- Stacks and queues
- Binary trees and n-trees
- Self-balancing trees
- AVL trees
- Heaps

- Graphs
- Graph representations
- Dijkstra's Algorithm