Before we start considering the implementation of graphs we should pause for a moment. All the data structures we have considered so far were to hold information, and we wanted to perform certain actions which mostly centred around inserting new items, deleting particular items, searching for particular items, and sorting the collection. At no time was there ever a connection between all those items, apart from the order in which their keys appeared. But that latter was never something that was inherent to the structure and that we therefore tried to represent somehow--it was just a property we used to store items in a way which made sorting and searching quicker. (While we created connections in binary search trees, they were important in themselves, and destroyed again when items were added or deleted.) Now, on the other hand, we are given a structure which comes with these connections, and it is our job to make sure that the implementation keeps track of those. After all, these constitute the information we are trying to encode!