while(tmp!=NULL)
                  {
                        rez->Insert(i,tmp->num);
                        if(vz
&& ((vznode*)tmp)->data!=NULL)
                              rez->SetEdge(i,tmp->num,*((vznode*)tmp)->data);
                        tmp=tmp->next;
                  }
            }
            return rez;
      };
 
      bool Insert(int
v1,int v2)//вставка нового элемента
      {
            if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0)//проверяем входные параметры
                  return
false;
            if(array[v1]->insert(v2))//осуществляем
вставку элемента в соответствующий список смежности
            {
                  if(!or)//если
граф неориентированный, вставляем обратное ребро
                        array[v2]->insert(v1);
                  number++;
                  return
true;
            }
            return
false;
      }
      bool Delete(int
v1,int v2)//удаление
      {
            if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0)//проверяем входные параметры
                  return
false;
            if(array[v1]->del(v2))//удаляем
элемент из соответственного списка смежности
            {
                  if(!or)//если
граф не ориентированный - удаляем обратное ребро
                        array[v2]->del(v1);
                  number--;
                  return
true;
            }
            return
false;
      }
      bool Edge(int
v1,int v2)//опрос наличия ребра, соединяющего вершины v1, v2,
      {
            if(v1<0
|| v2<0 || v1>=sz || v2>=sz)//проверяем входные параметры
                  return
false;
            return
array[v1]->Exist(v2);//осуществляем проверку в соответственном списке
смежности
      }
 
      bool SetEdge(int
v1,int v2,T1 data)//задание параметров ребра,
      {
            if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0 || !vz)//проверка входных
параметров
                  return
false;
            array[v1]->SetData(v2,data);//задаем
параметры соответствующего элемента списка смежности
            if(!or)//если
граф не ориентированный - задаём параметры обратного ребра
                  array[v2]->SetData(v1,data);
            return
true;
      }
 
 
      T1* GetEdge(int
v1,int v2)//получение данных
      {
            if(v1==v2
|| v1>=sz || v2>=sz || v1<0 || v2<0 || !vz)//проверяем входные
параметры
                  throw
"params not in interval";
            return
array[v1]->getData(v2);//получаем параметры соответственного узла списка
смежности
      }
 
      class Iterator;
      friend class
Iterator;
      class
Iterator:public IteratorATD<T1>//Итератор 
      {
            listGraph<T1>*
g;//указатель на связанный с итератором граф
            int vNum;         //номер
вершины, для которой создан итератор
            node* cur;        //
указатель на текущую смежную вершину
      public:
            Iterator(listGraph<T1>*
_g,int _vNum)//конструктор
            {//инициализируем
параметры
                  g=_g;
                  vNum=_vNum;
                  cur=NULL;
            }
            ~Iterator(){};//деструктор
            bool beg(int
&rez)//установка на начало
            {
                  if(vNum>=g->sz
|| vNum<0)//проверка параметров
                        return
false;
                  cur=g->array[vNum]->ph;//устанавливаем
элемент на голову соответствующего списка смежности
                  if(!off())
                        rez=cur->num;
                  return
!off();
            }
            bool
off()//опрос окончания просмотра смежных вершин,
            {
                  if(cur==NULL)//если
итератор не установле то cur равен NULL
                        return
true;
                  return
false;
            }
            bool
next(int &rez)//переход к следующей смежной вершине,
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.