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

Главная/

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

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

←предыдущая следующая→
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 

        return &data[--sp];      }

template <class T,int size> void StackSA<T,size>::Exclude(int num)

{       if(sp==0||num>=sp||num<0)return;//стек пустой или номер слишком большой

   for(int p=num;p<sp-1;p++) data[p]=data[p+1];  sp--; }

void main()

{  StackSA<int,20> s;  //стек из 20-ти int

   s.Push(35); s.Push(11); s.Push(89); //укладываем данные

   s.Exclude(1);           //вытаскиваем элемент

   int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();     }//вытаскиваем эл-ты

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

// 2. стек представлен статическим массивом

// 2. хранение объектов

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

template <class T,int size> class StackSA

{  private:

        T               data[size];

      int               sp;       //размер стека,кол-во элементов

   public:

        StackSA();

      int Push(T element);   //результат:если стек полный то [-1]

                                               //иначе, количество элементов

      T *Pop(void);           //результат:если стек пустой то [NULL]

      T *operator[](int num);}; //взятие по номеру

                              //результат:если нельзя то [NULL]

template <class T,int size> StackSA<T,size>::StackSA()

{  sp=0;   }

template <class T,int size> int StackSA<T,size>::Push(T element)

{  if(sp==size) return -1;    //стек полный

        data[sp]=element;

   return sp++; }

template <class T,int size> T *StackSA<T,size>::Pop(void)

{  if(sp==0) return NULL;     //стек пустой

        return &data[--sp];      }

template <class T,int size> T *StackSA<T,size>::operator[](int num)

{  if(sp==0||num>=sp||num<0)

                        return NULL;//стек пустой или номер слишком большой

   return &data[num];    }

void main()

{  StackSA<int,20> s;  //стек из 20-ти  int

   s.Push(54); s.Push(23); s.Push(87); //укладываем данные

   int *k=s[1];           //берем элемент

   int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();}//вытаскиваем эл-ты

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

//3. статический массив

//1. хранение указателей на обьекты

//1. Включение элемента с сохранением упорядочености.

template <class T,int size> class SArray

{  private:

                T       *data[size];

        public:

        SArray();

     ~SArray();

      void operator+(T *q);

      T* operator[](int i);};

template <class T,int size> SArray<T,size>::SArray()

{       for(int k=0;k<size;k++) data[k]=NULL;   }

template <class T,int size> SArray<T,size>::~SArray()

{       for(int k=0;k<size;k++) if(data[k]!=NULL) delete data[k]; }

template <class T,int size> void SArray<T,size>::operator+(T *q)

{       for(int k=0;k<size&&data[k]!=NULL;k++);

        if(k==size) return; //нет места в массиве

   for(;k>0&&*data[k-1]>*q;k--) data[k]=data[k-1]; //раздвигаем элементы

   data[k]=q; } //вставляем элемент

template <class T,int size> T* SArray<T,size>::operator[](int i)

{  if(i<0||i>=size) return NULL;

   if(data[i]==NULL) data[i]=new T;

        return data[i]; }

void main()

{  SArray<int,10> a;    //заводим массив указателей на int

        a+new int(5);   a+new int(25);  a+new int(15);  //заносим значения

        int k=*a[1];    }          // получаем значение 15

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

//3. статический массив

//1. хранение указателей на обьекты

//2. Поиск и возвращение минимального об"екта.

template <class T,int size> class SArray

{  private:

                T       *data[size];

        public:

        SArray();

     ~SArray();

      T* Min();

      T* operator[](int i);};

template <class T,int size> SArray<T,size>::SArray()

{       for(int k=0;k<size;k++) data[k]=NULL;   }

template <class T,int size> SArray<T,size>::~SArray()

{       for(int k=0;k<size;k++) if(data[k]!=NULL) delete data[k]; }

template <class T,int size> T* SArray<T,size>::Min()

{  for(int k=0;k<size&&data[k]==NULL;k++); //номер первого не NULL элемента

        int tmp=k++;                            //в tmp

        for(;k<size;k++)

                if(data[k]!=NULL&&*data[k]<*data[tmp]) tmp=k; //поиск минимального

   return data[tmp];  }

template <class T,int size> T* SArray<T,size>::operator[](int i)

{  if(i<0||i>=size) return NULL;

   if(data[i]==NULL) data[i]=new T;

        return data[i]; }

void main()

{  SArray<int,10> a;    //заводим массив указателей на int

        *a[1]=5; *a[4]=3; *a[3]=7;   //заносим значения

        int k=*a.Min();   }           // получаем значение 3

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

//3. статический массив

//1. хранение указателей на обьекты

//3. Сортировка (любым методом).

template <class T,int size> class SArray

{  private:

                T       *data[size];

        public:

        SArray();

     ~SArray();

      void Sort();

      T* operator[](int i); };

template <class T,int size> SArray<T,size>::SArray()

{       for(int k=0;k<size;k++) data[k]=NULL;   }

template <class T,int size> SArray<T,size>::~SArray()

{       for(int k=0;k<size;k++) if(data[k]!=NULL) delete data[k]; }

template <class T,int size> void  SArray<T,size>::Sort()

{       for(int i=0;i<size-1;i++)

        for(int j=i+1;j<size;j++)

        if(data[i]==NULL||(data[j]!=NULL&&*data[j]<*data[i]))   //сравнение

        { T* tmp=data[j]; data[j]=data[i]; data[i]=tmp; } } //обмен

template <class T,int size> T* SArray<T,size>::operator[](int i)

{  if(i<0||i>=size) return NULL;

   if(data[i]==NULL) data[i]=new T;

        return data[i]; }

void main()

{  SArray<int,10> a;    //заводим массив указателей на int

        *a[1]=15; *a[4]=9; *a[3]=17;   //заносим значения

        a.Sort();                 //сортируем

        int i=*a[0],j=*a[1],k=*a[2]; } //достаем отсортированнные по возрастанию

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

//3. статический массив

//1. хранение указателей на обьекты

//4. Двоичный поиск на основе сравнения с внешним об"ектом-ключом

template <class T,int size> class SArray

{  private:

                T       *data[size];

        public:

        SArray();

     ~SArray();

      T* FindBin(T &key);

←предыдущая следующая→
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 


Copyright © 2005—2007 «RefStore.Ru»