An **Unweighted Graph** is an abstract data structure that functions as a Graph implementation where all edges are assumed to have no weights associated.

Apart of implementing operations required by Graph abstract data type, following operations are added:

Operation |
Arguments |
Returns |
Description |

createEdge | VERTEX, VERTEX | void | Creates an edge between vertexes. |

isPath | VERTEX, VERTEX | boolean | Checks if there is a path of edges between vertexes. |

removeEdge | VERTEX, VERTEX | void | Removes edge between vertexes. |

And completes Graph VERTEX with following operations:

Operation |
Arguments |
Returns |
Description |

getEdges | EDGES | Gets vertexes current vertex points to in edges. | |

isEdge | VERTEX | boolean | Checks if current vertex has an edge with that of input |

addEdge | VERTEX | void | Creates an edge between current vertex and that of input |

removeEdge | VERTEX | void | Removes edge between current vertex and that of input |

Regarding implementation chosen to store a VERTEX's edges, which reflects into "EDGES" above, following data structures can be used:

- Dynamic Array implementing List of VERTEX: very fast to iterate, very slow to search a value/vertex into. To be used if value inside vertex is not unique!
- Hash Table implementing Set of VERTEX: quite fast to iterate, very fast to search a value/vertex into. To be used if value inside vertex is unique!

As an abstract data structure, provides only a partial implementation that takes no assumption on whether or not unweighted edges are bidirectional or not. It thus needs to be extended by one of below:

- Unweighted Directed Graph: assumes edges to be unidirectional by default
- Unweighted Undirected Graph: assumes edges to be always bidirectional