The fundamental idea
Instead of designing algorithms to deal with specific data structures, we can design them in terms of abstractions of data structures
By fitting an appropriate abstraction to each of several data structures, we can make the same algorithm work with several different data structures