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

Главная/

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

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

←предыдущая  следующая→
1 2 3 4 5 6 7 8 9 10 ... 

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

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

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

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

template <class T> class StackDA

{  private:

        T                **data;          //динамический МУ на данные

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

   public:

        StackDA(int _size);

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

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

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

     ~StackDA(void);    };

template <class T> StackDA<T>::StackDA(int _size)

{       size=_size;

        data=(T**)new char[size*sizeof(T*)];     //выделение памяти под МУ

   sp=0;   }

template <class T> int StackDA<T>::Push(T &element)

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

   for(int k=0;k<sp&&element<*data[k];k++);

   for(int p=++sp;p>k;p--) data[p]=data[p-1];

        data[k]=&element;

   return sp;   }

template <class T> T *StackDA<T>::Pop(void)

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

        return data[--sp];      }

template <class T> StackDA<T>::~StackDA(void)

{       delete data;    }

void main()

{       StackDA<int> s(20);  //стек из 20-ти указателей на int

   int a=13,b=5,c=7;

   s.Push(a); s.Push(b); s.Push(c);  //укладываем данные

   int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();}//вытаскиваем упорядоченные

                                            //по возрастанию эл-ты

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

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

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

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

template <class T> class StackDA

{  private:

        T                **data;          //динамический МУ на данные

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

   public:

        StackDA(int _size);

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

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

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

      T *FindMin(void);

     ~StackDA(void);    };

template <class T> StackDA<T>::StackDA(int _size)

{       size=_size;

        data=(T**)new char[size*sizeof(T*)];     //выделение памяти под МУ

   sp=0;   }

template <class T> int StackDA<T>::Push(T &element)

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

        data[sp]=&element;

   return sp++; }

template <class T> T *StackDA<T>::Pop(void)

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

        return data[--sp];      }

template <class T> StackDA<T>::~StackDA(void)

{       delete data;    }

template <class T> T *StackDA<T>::FindMin(void)

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

        T *min=data[0];

   for(int k=1;k<sp;k++) if(*data[k]<*min) min=data[k]; //поиск мин.

   return min;  }

void main()

{       StackDA<int> s(20);  //стек из 20-ти указателей на int

   int a=13,b=5,c=7;

   s.Push(a);   s.Push(b);   s.Push(c);  //укладываем данные

   int *m=s.FindMin();  }  // поиск мин.

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

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

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

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

template <class T> class StackDA

{  private:

        T                **data;          //динамический МУ на данные

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

   public:

        StackDA(int _size);

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

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

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

      void Sort(void);

     ~StackDA(void);    };

template <class T> StackDA<T>::StackDA(int _size)

{       size=_size;

        data=(T**)new char[size*sizeof(T*)];     //выделение памяти под МУ

   sp=0;   }

template <class T> int StackDA<T>::Push(T &element)

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

        data[sp]=&element;

   return sp++; }

template <class T> T *StackDA<T>::Pop(void)

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

        return data[--sp];      }

template <class T> void StackDA<T>::Sort(void)

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

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

        if(*data[j]>*data[i])

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

template <class T> StackDA<T>::~StackDA(void)

{       delete data;    }

void main()

{       StackDA<int> s(20);  //стек из 20-ти указателей на int

   int a=13,b=5,c=7;

   s.Push(a); s.Push(b); s.Push(c);  //укладываем данные

   s.Sort();

   int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();}//вытаскиваем упорядоченные

                                            //по возрастанию эл-ты

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

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

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

// 4. двоичный поиск по ключу

template <class T> class StackDA

{  private:

        T                **data;          //динамический МУ на данные

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

   public:

        StackDA(int _size);

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

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

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

      void Sort(void);

      T *FindBin(T &key);     //двоичный поиск

     ~StackDA(void);    };

template <class T> StackDA<T>::StackDA(int _size)

{       size=_size;

        data=(T**)new char[size*sizeof(T*)];     //выделение памяти под МУ

   sp=0;   }

template <class T> int StackDA<T>::Push(T &element)

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

        data[sp]=&element;

   return sp++; }

template <class T> T *StackDA<T>::Pop(void)

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

        return data[--sp];      }

template <class T> void StackDA<T>::Sort(void)

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

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

        if(*data[j]>*data[i])

                { T

←предыдущая  следующая→
1 2 3 4 5 6 7 8 9 10 ... 


Copyright © 2005—2007 «RefStore.Ru»