In theory and academics, it is often most wise to truly understand the details. This is why in university studying computer science, you can get by without having to write much language-specific code. You learn the fundamentals, not, say syntax of C#. With that fundamental information, it should be easy to learn a specific programming language or other tool for that matter.
Understanding the details of different algorithms and data structures is good because they all exist to solve different problems--they don't all exist just because people like inventing them for fun. With this knowledge, as well as practice and experimenting with them, you become more effective in designing solutions in code.
It is rarely necessary or even a good idea to re-implement some standard algorithm or data structure if one already exists. Well designed software is all about reuse. If you are working for a company, they often don't care about your academic or personal benefit, they care about being cost-effective, reusing solutions, etc.
In some cases it may be appropriate to re-implement these things, depending on performance, security, stability requirements and constraints of the system. For example real-time operating systems, hardware drivers, health care, military, traffic hardware or software.