Разработка абстрактного типа данных «Простой граф», страница 9

                              if(tmp->next->num==_num)//если элемент найден, то удаляем его

                              {

                                   node* tmp1=tmp->next;

                                   tmp->next=tmp->next->next;

                                   if(!vz)     delete tmp1;

                                   else {

                                         delete ((vznode*)tmp1)->data;

                                         delete tmp1;

                                   }

                                   return true;

                              }

                              else

                                   tmp=tmp->next;

                        }

                  }

                  return false;

            }

 

            bool Exist(int _num)//проверка существования элемента

            {

                  node* tmp=ph;

                  while(tmp!=NULL)//проверяем все узлы списка

                        if(tmp->num==_num)//пока не найден искомый

                              return true;

                        else

                              tmp=tmp->next;

                  return false;

            }

     

     

            void SetData(int _num,T1 _data)//установака параметров ребра

            {

                  if(!vz)//задать вес можно только узлу взвешаной структуры

                        throw "not weighed";

                  node* tmp=ph;

                  while(tmp!=NULL)//ищем нужный эллемент

                        if(tmp->num==_num){//и если нашли, то задаем его параметры

                              ((vznode*)tmp)->data=new T1(_data);

                              return;

                        }

                        else

                              tmp=tmp->next;

            }

     

      //получение параметров некоторого узла

            T1* getData(int _num)

            {

                  if(!vz)//получить вес можно только из узла взвешаной структуры

                        throw "not weighed";

                  node* tmp=ph;

                  while(tmp!=NULL)//ищем нужный эллемнет и берём его данные

                        if(tmp->num==_num)

                              return ((vznode*)tmp)->data;

                        else

                              tmp=tmp->next;

                  throw "not exist elem with this number";

            };

      };

 

      list** array;           //массив указателей на списки смежности

      int sz;                       //колличество элементов

      int number;             //колличество рёбер

      bool or,vz;             //свойства графа

public:

      listGraph(int size,bool _or,bool _vz)//конструктор-входные параметры размер и свойства

      {

            vz=_vz;

            or=_or;

            sz=size;

            number=0;

            array=new list*[sz];

            for(int i=0;i<sz;i++)

                  array[i]=new list(vz);

      };

     

      ~listGraph()                  //деструктор

      {

            for(int i=0;i<sz;i++) delete [] array[i];

            delete [] array;

      }

 

      int V(){return sz;};//- опрос числа вершин в графе,

      int E(){return number;};//- опрос числа ребер в графе,

      bool Directed(){return or;};//     опрос типа графа (ориентированный / неориентированный)

      bool Weighed(){return vz;}

      int Dense(){return 1;};//опрос формы представления графа (L- граф / M- граф),

 

      GraphATD<T1>* ToListGraph()

      {

            return (GraphATD<T1>*)this;

      };

 

      GraphATD<T1>* ToMatrixGraph()

      {

            GraphATD<T1>* rez=(GraphATD<T1>*)new matrixGraph<T1>(sz,or,vz);//создаём обьект М-графа

            node* tmp;

            for(int i=0;i<sz;i++)//копируем все элемнты из текущего объекта в новый

            {

                  tmp=array[i]->ph;