Week 9: Lab Document, 11/1

In many applications of graphs, the edges of the graph are weighted in some way. For example, in applications pertaining to transportation, the edges might be weighted by highway distance in miles between the pair of endpoints. Thus far, our implementation of the graph class has only considered unweighted graphs. This lab asks you to extend the myListGraph class to a weighted graph class.

To do this you can modify the adjacency list representation in a simple way so as to store edge weights as well. Suppose that edge {u, v} has weight w and further suppose that i and j are respectively the indices of vertices u and v. Recall that edge {u, v} is represented by u appearing in the linked list at Edges[j] and v appearing in the linked list at Edges[i]. To represent the weight w of this edge, we should store the pair (u, w) in the linked list at Edges[j] and the pair (v, w) in the linked list at Edges[i]. Thus each Link object now contains, not just a String but a double as well.

Problem: Modify the StringLink class and the StringLinkList class so that we can define a linked list in which each link contains a String as well as a double. Call the new classes EdgeLink and EdgeLinkList. The methods in the EdgeLinkList class that add new links (e.g., insertFirst, addLast) should take a double argument, in addition to the String argument. The String field in the link should be treated as the key and so all methods that search based on a key (e.g., find and delete) should take just a String argument (as before).

Once the EdgeLinkList class has been defined, we can change the definition of Edges in myListGraph.java from StringLinkList[] to EdgeLinkList[] in order to represent a weighted graph.