Когда начинать изучать алгоритмы и структуры данных?
Дайте совет, когда и как стоит приступать к этим вкусняшкам? Когда у вас появятся релевантные задачи. Например, как вам уже рекомендовали, "олимпиадные". (рекомендую codeeval и codewars). Вы можете сначала решить задачу каким-либо "наивным" способом, затем поискать (спросить) подходящую структуру данных, сравнить производительность подходов. На мой взгляд, привязка к какой-никакой практике позволяет знаниям лучше усваиваться.
Еще могу порекомендовать курс (там две части) на coursera от Stanford за авторством Tim Roughgarden. Очень доступно объясняет.
150 страниц голой теории? смысл? вспомните как в школе учились - 2-10 страниц теории + задачки по прочитанной теме и так далее в таком цикле. и конечно после каждой главы проверка + сложные задачи. как то так нужно обучаться точным наукам