Пример: Глобальная сеть INTERNET
Я ищу:
На главную  |  Добавить в избранное  

Главная/

Программирование, базы данных. /

Шпоры по Си++. Шаблоны стандартных структур данных

←предыдущая следующая→  
... 18 19 20 21 22 23 24 25 26 27 

        public:

                void Add(T &a);

                int Delete(int k);

                BTree();

     ~BTree(); };

template <class T> void BTree<T>::Add(T &a)

{       if(data==NULL) { data=a; return; } //вставка в текущий

        if(a>data)

        { if(r==NULL) r=new BTree<T>; r->Add(a); } else //в правый

        { if(l==NULL) l=new BTree<T>; l->Add(a); } }    //в левый

template <class T> int BTree<T>::Delete(int k)

{       if(k==0)        { data=0; return 0; }

   if(k==1&&l!=NULL) return l->Delete(0);

   if(k==2&&r!=NULL) return r->Delete(0);

   if(l!=NULL) {k-=l->Delete(k); if(k==0) return 0; }

   if(r!=NULL) {k-=r->Delete(k); if(k==0) return 0; }

        return k; }

template <class T> BTree<T>::BTree()

{       l=NULL; r=NULL; data=0; }//инициализация

template <class T> BTree<T>::~BTree()

{       data=0;  //удаление данных

        if(l!=NULL) delete l;        //  -//-   левого поддерева

        if(r!=NULL) delete r;  }     //  -//-   правого поддерева

void main()

{       BTree<long> a; //двоичное дерево из long-ов

   a.Add(10); a.Add(3); a.Add(210); a.Add(70);//заполнение

        a.Delete(1);}

//----------------------------------------------------------------------------

// 8. Двоичное дерево

// 2. Хранение обьектов

// 7. Поиск и возвращение элемента по номеру.

template <class T> class BTree

{       private:

                BTree<T> *l,*r;  //указатели на левое и правое поддеревья

                T data;

        public:

                void Add(T &a);

                T* Find(int &k);

                BTree();

     ~BTree(); };

template <class T> void BTree<T>::Add(T &a)

{       if(data==NULL) { data=a; return; } //вставка в текущий

        if(a>data)

        { if(r==NULL) r=new BTree<T>; r->Add(a); } else //в правый

        { if(l==NULL) l=new BTree<T>; l->Add(a); } }    //в левый

template <class T> T* BTree<T>::Find(int &k)

{       if(k==0)        return &data;

   T* tmp=NULL; k--;

        if(l!=NULL) {tmp=l->Find(k); if(tmp!=NULL) return tmp; }

   if(r!=NULL) {tmp=r->Find(k); if(tmp!=NULL) return tmp; }

        return NULL; }

template <class T> BTree<T>::BTree()

{       l=NULL; r=NULL; data=0; }//инициализация

template <class T> BTree<T>::~BTree()

{       data=0;  //удаление данных

        if(l!=NULL) delete l;        //  -//-   левого поддерева

        if(r!=NULL) delete r;  }     //  -//-   правого поддерева

void main()

{       BTree<long> a; //двоичное дерево из long-ов

   a.Add(10); a.Add(3); a.Add(210); a.Add(70);//заполнение

        long m=*a.Find(1);}

 

←предыдущая следующая→  
... 18 19 20 21 22 23 24 25 26 27 


Copyright © 2005—2007 «RefStore.Ru»