public void Add(Edge <VisVertex> edge) { if (IsEmpty) { head = new AdjacencyVertexNode(edge); head.Previous = head; return; } if (edge <= head) { head = new AdjacencyVertexNode(edge, head.Previous, head); //При добавлении элемента в начало, сохраняем в начале указатель на конец head.Next.Previous = head; //Обновляем информацию о предшественнике у сдвинутого элемента return; } var currentNode = head; while (currentNode.Next != null && edge > currentNode.Next) { currentNode = currentNode.Next; } currentNode.Next = new AdjacencyVertexNode(edge, currentNode, currentNode.Next); if (currentNode.Next.Next == null) { head.Previous = currentNode.Next; } //Если добавили в конец, обновляем информацию о конце в Head else { currentNode.Next.Next.Previous = currentNode.Next; } //Если добавили не в конец, //обновляем информацию о предшественнике в элементе перед которым вставили }
public Edge <VisVertex> ExtractMaxWeightEdge() { if (IsEmpty) { throw new Exception("Список пуст"); } Edge <VisVertex> edge = head.Previous.Edge; if (head.Previous == head) { head = null; } else { head.Previous.Previous.Next = null; head.Previous = head.Previous.Previous; } return(edge); }
public bool MoveNext() { if (list.IsEmpty) { return(false); } if (position == -1) { position++; return(true); } if (currentNode.HasNext) { currentNode = currentNode.Next; position++; return(true); } Reset(); return(false); }
public Edge <VisVertex> ExtractMinWeightEdge() { if (IsEmpty) { throw new Exception("Список пуст"); } Edge <VisVertex> edge = head.Edge; if (head.Previous == head) { head = null; } else { var tmp = head.Previous; head = head.Next; head.Previous = tmp; } return(edge); }
public void Reset() { currentNode = list.Head; position = -1; }
public void Dispose() { list = null; currentNode = null; }
public AdjListEnumerator(AdjVertexSortedList list) { this.list = list; currentNode = list.Head; position = -1; }
public AdjVertexSortedList() { head = null; }