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