I'm a full stack developer working in the .Net ecosystem. I recently wanted to learn more about Data Structures and Algorithms as they are fundamental to software development. My degree is in Information Systems so I didn't study this in college. I found the information on the internet disjointed, so I collected the best sources I could find, and placed the resources in specific order.

#### Big O Notation

Math. Scary. This resource is really the best I found on learning Big O notation. The reason this is important is it allows you to mathematically state the complexity of an algorithm. Whereas cyclomatic complexity (good for testing) states the number of pathways a function can take, Big O states algorithmic complexity (good for function analysis).

Rob Bell - Beginners Guide To Big O

Interview Cake's Guide To Big O

#### Data Structures

Data structures are fairly simple. If you're a working developer you will be familiar with them. For instance a hash table is a C# data structure, but we will generally use a dictionary (which is a hash table) for type safety and compiler support. I think there's still value in learning the base data structures to get greater context for your decisions on which structures to use and implement. For instance, since a dictionary is a hash table it is very fast in comparison to a list.

MIT Opencourseware - Advanced Data Structures

### Algorithms

Khan Academy - Algorithms

This is a great introduction. Think of it as the course survey.

TopCoder - Data Science Tutorials

Coursera - Algorithms Design and Analysis

I always like to acquire a good reference book on something I'm learning. Since you landed here you're probably proficient in C#. Unfortunately, there doesn't seem to be a good book on Data Structures and Algorithms with C# examples. The next best thing I found was a book with Java examples. I am currently reading this book and it is easy to follow along with since the languages are so similar. Anyway, I am only partially through this book but I feel comfortable recommending it.

I also found a free resource through one of the courses if you don't want to buy the book right now (even though it's seriously worth it).

**FREE** Algorithms - Dasgupta, C. H. Papadimitriou, and U. V. Vazirani

### Practice

TopCoder

LeetCode

UVA Online Judge

### More Resources

I'm working on a sample library of Algorithms in C#, and I've posted it on Github. I don't have much up there just yet, but I'm going to update it as I work through them. If you're interested: Github - AlgorithmsInCSharp

One last resource you might find handy if you have trouble deciphering the math involved (don't worry, many self taught and on the job learners have the same issues). I even took discrete math in college and didn't know Big O notation. There's always something to learn. Math For Computer Scientists