# Разработка абстрактного типа данных «Простой граф», страница 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;`