Graph.h
#pragma once
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stack>
#include <queue>
class Graph
{
private:
class EdgeList
{
public:
class Node
{
public:
int link;
Node* next = nullptr;
public:
Node(const int& n) :link(n)
{
}
};
Node* head = nullptr;
public:
class Iterator
{
private:
Node* it;
public:
Iterator(Node* i) :it(i) {}
Iterator operator++()
{
it = it->next;
return *this;
}
Iterator operator++(int)
{
Node* i = it;
it = it->next;
return Iterator(i);
}
bool operator == (const Iterator& rhs)
{
if (it == nullptr && rhs.it == nullptr)
return true;
if (it != nullptr && rhs.it != nullptr)
{
if (it == rhs.it)
return true;
}
return false;
}
bool operator != (const Iterator& rhs)
{
return !(*this == rhs);
}
const int& operator *()
{
if (it == nullptr)
throw std::logic_error("* nullptr error");
return it->link;
}
};
/******************************************
函数名称: begin
函数说明: 返回迭代器begin位置
*******************************************/
Iterator begin()const
{
return Iterator(head);
}
/******************************************
函数名称: end
函数说明: 返回迭代器尾部也就是nullptr
返回值 Iterator
*******************************************/
Iterator end()const
{
return Iterator(nullptr);
}
/******************************************
函数名称: addNode
函数说明: 给邻接表增加节点
返回值: void
*******************************************/
void addNode(const int& link)
{
if (head == nullptr)
{
head = new Node(link);
return;
}
Node* curr = head;
while (curr->next != nullptr)
curr = curr->next;
curr->next = new Node(link);
return;
}
};