Файл ListGraph.h

#include "graph.h" // Описание родительского класса

 

// Описание шаблона классов для представления

// простых однонаправленных списков

template <class T>

class List {

 

// Внутренний класс для представления элементов списка

struct Listltem {

Т item; // Собственно элемент списка

Listltem *next; // Ссылка на следующий элемент списка

 

// Конструктор элементов введен для удобства реализации операций

Listltem(const T fiitem, Listltem *next = NULL)

{

Listltem::item = item;

Listltem::next = next; }

};

 

// Список представлен ссылками на первый и последний элементы...

Listltem *first, *last;

// ...а также счетчиком числа элементов

int count;

public:

// Конструктор пустого списка - единственный в нашем описании

List() { first = last = NULL; count = 0; )

 

// Операции добавления элемента...

void add(const T &);

// ...и проверки наличия элемента в списке

bool has(const T &) const;

};

 

// Собственно описание класса для представления L-графа

class ListGraph : public Graph {

// Массив списков целых, каждое из которых задает

// номер вершины, в которую входит дуга. Индексы в массиве

// задают номера вершин, из которых эти дуги исходят.

List<int> *graph;

// Количество вершин в графе.

int vertexNumber;

public:

// Конструктор порождает N списков и инициализрует массив этих

// списков, запоминая количество вершин, заданное аргументом

ListGraph(int n) { graph = new List<int>[vertexNumber = n]; }

 

// Операция подсчета вершин просто выдает запомненное ранее значение

int vertexCount() const { return vertexNumber; 1

 

// Две следующие функции реализуют операции над дугами

void addArc(int from, int to);

bool hasArc(int from, int to) const;

};