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