The important things that were covered in the graph discussion were the 2 basic ways of representing nodes and links.
You may do either a Boolean matrix where adjacency is indicated by a true at the intersection of 2 nodes, or you may use a Vector of nodes with a linked list of adjacent edges.
The matrix implementation leads to sparse matrices because most of the entries (unless there are a lot of connections) are 0. The adjacency approach uses the minimal amount of memory. Because you must search each row in an adjacency matrix the out-degrees computation is O(n^2); however, the adjacency list approach leads to O(n+e) for out-degrees where e is the number of edges. This should be apparent from inspection.