The primary focus of this thesis is to study when a graph is Hamiltonian or not. Our goal is to understand maximally non-Hamiltonian graphs. These are graphs with as many edges as possible, while still not containing a Hamiltonian cycle. A maximally non-Hamiltonian graph is a graph such that the addition of one more edge will make the graph become a Hamiltonian graph. This thesis derives some mathematical results so that we can understand Hamiltonian graphs. Once we have gained a better understanding of these objects, we create some code to try and help us efficiently find all maximally non-Hamiltonian graphs for any given number of vertices. We proceed by first characterizing all possible simple graphs on n unlabelled vertices through degree sequences. Afterwards, we employ a commutative algebraic criterion for when a graph contains a Hamiltonian cycle, first studied by Deloera et al., so that we may eliminate these graphs from our search. Once all the Hamiltonian graphs have been removed, we create a poset, ordered by subgraph containment, so we may look at the maximal elements in this poset. Finally, once we have generated our maximally non-Hamiltonian graphs, we examine their structure and some well known results.