To quote Hofstadter: Mu.<p>Particular algorithms operate on particular data structures; a binary search on a sorted list makes sense, while a binary search on an unsorted list is meaningless. It doesn't make any sense to have one of "a good algorithm" or "a good data structure" without the other.
I suggest you read "Algorithms + Data Structures = Programs" by Niklaus Wirth. <a href="http://tinyurl.com/yw7tgo" rel="nofollow">http://tinyurl.com/yw7tgo</a>
Mooooo..... :)<p>I usually visualize the data structure that exists, or that I want, and work "backwards" from there. But whichever direction you use, always always remember that the idea is to make the design simpler and more clear.