from Graph_ import Node, LinkedList, Queue
class Vertex:
def __init__(self, label):
self.label = label
class Graph:
def __init__(self):
self.adjacency_list = {}
self.edge_weights = {}
def add_vertex(self, new_vertex):
self.adjacency_list[new_vertex] = []
def add_directed_edge(self, from_vertex, to_vertex, weight = 1.0):
self.edge_weights[(from_vertex, to_vertex)] = weight
self.adjacency_list[from_vertex].append(to_vertex)
def add_undirected_edge(self, vertex_a, vertex_b, weight = 1.0):
self.add_directed_edge(vertex_a, vertex_b, weight)
self.add_directed_edge(vertex_b, vertex_a, weight)
def get_vertex(self, vertex_label):
for vertex in self.adjacency_list:
if vertex.label == vertex_label:
return vertex
return None
def total_edges(self,vertices):
#实现total_edges 获得所有边
if __name__ == '__main__':
class Node:
def __init__(self, initial_data):
self.data = initial_data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
self.tail = None
def append(self, new_node):
if self.head == None:
self.head = new_node
self.tail = new_node
else:
self.tail.next = new_node
self.tail = new_node
def remove_after(self, current_node):
# Special case, remove head
if (current_node == None) and (self.head != None):
succeeding_node = self.head.next
self.head = succeeding_node
if succeeding_node == None: # Remove last item
self.tail = None
elif current_node.next != None:
succeeding_node = current_node.next.next
current_node.next = succeeding_node
if succeeding_node == None: # Remove tail
self.tail = current_node
class Queue:
def __init__(self):
self.list = LinkedList()
def enqueue(self, new_item):
# Create a new node to hold the item
new_node = Node(new_item)
# Insert as list tail (end of queue)
self.list.append(new_node)
def dequeue(self):
# Copy data from list's head node (queue's front node)
dequeued_item = self.list.head.data
# Remove list head
self.list.remove_after(None)
# Return the dequeued item
return dequeued_item