A big part of programming is organizing your data so that you can store and retrieve it effectively. This is what data structures allow us to do. They're the lifeblood of programming. Almost every program written has given thought to how do I store this? How do I retrieve this? This is why at most universities there are whole classes dedicated to data structures, this is why when programmers go to job interviews they ask them about data structures. So much of what a programmer does depends on how they organize their data.
It's hard to talk about data structures without mentioning algorithms, because they're so intertwined. Algorithms In general are instructions on how to do something. Algorithms say things like "this is how you sort data" and "this is how you find the shortest path". Interestingly enough there are many ways to do something, and the way you do it can effect your program dramatically.
This weeks edition of Learning Computations gives you top notch resources on Data Structures and Algorithms.
Note: going forward I'll refer to Data Structures as DS, and I'll refer to data structures and algorithms as DS+A
As mentioned earlier universities have whole courses dedicated to DS+A. In general the whole time undergrads are learning they're always talking about these subjects, because they permeate through most of computer science. Topics in DS+A courses usually cover DS, algorithms, and their analysis using mathematical techniques. This means that undergrads spend a lot of time doing two things. First is understanding DS+A, and second is formally analyzing and proving properties about algorithms using math.
So what does this mean for self learners? If a self learner wants to reach parity with an undergrad then they'll have to do two things.
Learning the math behind this takes time, and usually undergrads take a whole course on how to do this. Luckily in the real world the majority of this math doesn't get used. What really matters is understanding DS+A concretely, and being able to analyze the time complexity (i.e. how does this thing perform in the worst case) using big O notation.
Free Code Camp - This video (course? Its 8 hours) is great introductory material if you've not been exposed much to analysis and DS+A. It provides some motivating thoughts to get you thinking, and then goes to the heart of the topic. No non-sense and straight to the point.
MIT - Intro To Algorithms - This is MIT's course for an introduction to algorithms, and it's high quality as you would expect. Unsurprisingly like many university courses online it focuses a lot of time on mathematical aspects that aren't often used in real life. There is still a lot of value in these videos, but if you don't understand the math it'll be hard to grasp all the concepts.
The Algorithm Design Manual - Steven Skiena is the author of this book and a CS professor known for his algorithmic work. This book is all about DS+A and their analysis, and it's one many students use to study algorithms. Again like most university resources there isn't a shortage of math, but that being said it still has great insights, descriptions, and implementations of DS+A. Oh also Skiena has a free course on YouTube
Leetcode - Leetcode is a website that is filled with DS+A questions (programming challenges). Most of them are for interviews, but the most effective way to understand both DS+A is to use them in the context of problems. They provide solutions and sometimes articles on how to solve the problems. After a while they just feel like puzzles with a dependency on DS+A knowledge and can be quite enjoyable.
Interview Cake - Interview Cake is similar to Leetcode, except that it is more structured. It provides guidance through readings, and then problems to test your knowledge of concepts.
Cracking the coding interview - This book may come across as a book for interviewing (and it is), but it's also a great resource on practical DS+A. Programming interviews are notoriously based in DS+A knowledge and analysis. This book makes approaching big O and DS+A simple. It's on its 6th edition, and they've been able to clearly and succinctly communicated these ideas into digestible chapters. Also, It's filled with exercises and answers to the exercises so you can test yourself. This book helped me get a job, and I'm sure many other developers.
If you want to get a good understanding of DS+A in a way that abstracts most of the rigorous mathematical techniques then stick to these resources
If you want a more traditional and mathematical understanding of DS+A then check these out