So since these higher level languages
manage the memory for you, what would
you use data structures for?
The main reason for using a data structure is not about garbage collection. But it is about storing data in a way that is efficient in some way. So what matters most is HOW you are organizing the data. Which is exactly what the language can't automatically figure out for you.
Sure the high level language will come with several preloaded data structures (and you should 100% use these preloaded data structures when they are provided instead of making your own), but not all data structures are provided that you may need.
Data structures organize the storage of memory in some way so that the algorithms that run on them can be implemented giving efficient results.
For most tasks you wouldn't need to implement your own data structures. But this depends fully on what you are coding.
I can understand the need for queues
and stacks but would you ever need to
use a binary tree in Ruby?
There are a lot of examples for using a binary tree, but not in common every day projects, for example you may need to implement huffman coding.
Other data structures can be used to have the space savings and fast lookups of using a trie, or you may need to store a LOT of data with fast lookup by using a btree. Several data structures have specific uses and are optimized for different things. Whether the language is modern or not and whether it has garbage collection or not doesn't change that.
The trend though, is that custom implemented data structures are coded less, and thought about less. A similar argument happens with common algorithms. In more modern languages, like LINQ you simply specify to sort. You don't actually say how to sort.