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

Главная/

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

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

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

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> int StackSA<T, size>::Insert(T &element,int num)

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

                        return -1;//стек полный или номер слишком большой

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

        data[num]=&element;

   return sp;   }

void main()

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

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

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

   s.Insert(c,1);         //вставляем элемент

   int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();

        }//вытаскиваем эл-ты

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

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

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

// 6. исключение элемента по номеру

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 *Exclude(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>::Exclude(int num)

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

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

   T *temp=data[num];

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

   sp--;

   return temp; }

void main()

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

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

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

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

   int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();

        }//вытаскиваем эл-ты

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

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

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

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

template <class T, int size> class StackSA

{  private:

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

      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

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

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

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

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

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

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

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

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

template <class T,int size> class StackSA

{  private:

        T               data[size];

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

   public:

      StackSA();

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

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

      T *Pop(void);};           //результат:если стек пустой то [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;    //стек полный

   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,int size> T *StackSA<T,size>::Pop(void)

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

        return &data[--sp];      }

void main()

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

   s.Push(27); s.Push(13); s.Push(19);  //укладываем данные

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

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

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

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

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

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

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 *FindMin(void); };

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>

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


Copyright © 2005—2007 «RefStore.Ru»