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

Главная/

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

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

←предыдущая следующая→
... 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 


Copyright © 2005—2007 «RefStore.Ru»