←предыдущая следующая→
... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
child[i]->Delete(pos); } }
void main()
{ Tree<int,5> a; //создание дерева с пятью потомками в вершине
a.Add(5); a.Add(11); a.Add(3); a.Add(15); //вставка элементов
a.Delete(1); }//удаление элемента
//----------------------------------------------------------------------------
// 7. Дерево с ограниченным числом потомков
// 1. Хранение указателей на объекты
// 7. Поиск и возвращение элемента по номеру.
template <class T,int size> class Tree
{ private:
Tree<T,size> *child[size];
T *data;
public:
Tree();
~Tree();
void Add(T a); //добавление элемента
T* Get(int pos);}; //получить элемент по номеру
template <class T,int size> Tree<T,size>::Tree()
{ for(int i=0;i<size;i++) child[i]=NULL; data=NULL; }
template <class T,int size> Tree<T,size>::~Tree()
{ if(data!=NULL) delete data; //удаление элемента
for(int i=0;i<size;i++)
if(child[i]!=NULL) delete child[i]; }//удаление поддеревьев
template <class T,int size> void Tree<T,size>::Add(T a) //добавление элемента
{ if(data==NULL) { data=new T; *data=a; return; }
for(int i=0;i<size&&child[i]!=NULL&&a>*child[i]->data;i++);
if(child[i]==NULL) child[i]=new Tree<T,size>;
child[i]->Add(a); }
template <class T,int size> T* Tree<T,size>::Get(int pos)
{ if(pos==0) return data;
for(int i=0;i<size;i++) //текущий уровень
if(child[i]!=NULL)
if(--pos==0) { return child[i]->data; }
T* p;
for(i=0;i<size;i++) //поддерево
if(child[i]!=NULL)
{ p=child[i]->Get(pos);
if(p!=NULL) return p; }
return NULL; }
void main()
{ Tree<int,5> a; //создание дерева с пятью потомками в вершине
a.Add(5); a.Add(11); a.Add(3); a.Add(15); //вставка элементов
int i=*a.Get(2); } //взять элемент по номеру
//----------------------------------------------------------------------------
// 7. Дерево с ограниченным числом потомков
// 2. Хранение объектов
// 1. Включение элемента с сохранением упорядочености.
template <class T,int size> class Tree
{ private:
Tree<T,size> *child[size];
T data;
public:
Tree();
~Tree();
void Add(T a); }; //добавление элемента
template <class T,int size> Tree<T,size>::Tree()
{ for(int i=0;i<size;i++) child[i]=NULL; data=0; }
template <class T,int size> Tree<T,size>::~Tree()
{ for(int i=0;i<size;i++)
if(child[i]!=NULL) delete child[i]; }//удаление поддеревьев
template <class T,int size> void Tree<T,size>::Add(T a) //добавление элемента
{ if(data==0) { data=a; return; }
for(int i=0;i<size&&child[i]!=NULL&&a>child[i]->data;i++);
if(child[i]==NULL) child[i]=new Tree<T,size>;
child[i]->Add(a); }
void main()
{ Tree<int,5> a; //создание дерева с пятью потомками в вершине
a.Add(5); a.Add(11); a.Add(3); a.Add(15);} //вставка элементов
//----------------------------------------------------------------------------
// 7. Дерево с ограниченным числом потомков
// 2. Хранение объектов
// 2. Поиск и возвращение минимального обьекта.
template <class T,int size> class Tree
{ private:
Tree<T,size> *child[size];
T data;
public:
Tree();
~Tree();
void Add(T a); //добавление элемента
T FindMin(); }//поиск минимального
template <class T,int size> Tree<T,size>::Tree()
{ for(int i=0;i<size;i++) child[i]=NULL; data=0; }
template <class T,int size> Tree<T,size>::~Tree()
{ for(int i=0;i<size;i++)
if(child[i]!=NULL) delete child[i]; }//удаление поддеревьев
template <class T,int size> void Tree<T,size>::Add(T a) //добавление элемента
{ if(data==0) { data=a; return; }
for(int i=0;i<size&&child[i]!=NULL&&a>child[i]->data;i++);
if(child[i]==NULL) child[i]=new Tree<T,size>;
child[i]->Add(a); }
template <class T,int size> T Tree<T,size>::FindMin()
{ T tmp=data; //принимаем начальный за минимальный
for(int i=0;i<size;i++)
if(child[i]!=NULL)
{ T tmp2=child[i]->FindMin(); //ищем в поддереве
if(tmp2<tmp) tmp=tmp2; }
return tmp; } //возвращаем минимальный
void main()
{ Tree<int,5> a; //создание дерева с пятью потомками в вершине
a.Add(5); a.Add(11); a.Add(3); a.Add(15); //вставка элементов
int k=a.FindMin(); } // поиск минимального
//----------------------------------------------------------------------------
// 7. Дерево с ограниченным числом потомков
// 2. Хранение объектов
// 3. Сортировка (любым методом).
template <class T,int size> class Tree
{ private:
Tree<T,size> *child[size];
T data;
public:
Tree();
~Tree();
void Add(T a); //добавление элемента
void Sort(); };//сортировка
template <class T,int size> Tree<T,size>::Tree()
{ for(int i=0;i<size;i++) child[i]=NULL; data=0; }
template <class T,int size> Tree<T,size>::~Tree()
{ for(int i=0;i<size;i++)
if(child[i]!=NULL) delete child[i]; }//удаление поддеревьев
template <class T,int size> void Tree<T,size>::Add(T a) //добавление элемента
{ if(data==0) { data=a; return; }
for(int i=0;i<size&&child[i]!=NULL&&a>child[i]->data;i++);
if(child[i]==NULL) child[i]=new Tree<T,size>;
child[i]->Add(a); }
template <class T,int size> void Tree<T,size>::Sort()
{ for(int i=0;i<size;i++)
if(child[i]!=NULL) child[i]->Sort(); //сортируем поддерево
for(i=0;i<size-1;i++) //сортировка поддеревьев
for(int j=i+1;j<size;j++)
if(child[i]!=NULL&&child[j]!=NULL)
if(child[j]->data<child[i]->data) //поиск наибольшего
{ T t=child[j]->data;child[j]->data=child[i]->data;
child[i]->data=t; } } //обмен
void main()
{ Tree<int,5> a; //создание дерева с пятью потомками в вершине
a.Add(5); a.Add(11); a.Add(3); a.Add(15)
←предыдущая следующая→
... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
|