|
|
Реферат: Шпоры по Си. Шаблоны стандартных структур данных
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 1. хранение указателей на объекты
// 1. включение элемента с сохранением упорядоченности
template class StackDA
{ private:
T **data; //динамический МУ на данные
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T**)new char[size*sizeof(T*)]; //выделение памяти под
МУ
sp=0; }
template int StackDA::Push(T &element)
{ if(sp==size) return -1; //стек полный
for(int k=0;k
for(int p=++sp;p>k;p--) data[p]=data[p-1];
data[k]=&element;
return sp; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template StackDA::~StackDA(void)
{ delete data; }
void main()
{ StackDA 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 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 StackDA::StackDA(int _size)
{ size=_size;
data=(T**)new char[size*sizeof(T*)]; //выделение памяти под
МУ
sp=0; }
template int StackDA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template StackDA::~StackDA(void)
{ delete data; }
template T *StackDA::FindMin(void)
{ if(sp==0) return NULL; //стек пустой
T *min=data[0];
for(int k=1;k
return min; }
void main()
{ StackDA 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 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 StackDA::StackDA(int _size)
{ size=_size;
data=(T**)new char[size*sizeof(T*)]; //выделение памяти под
МУ
sp=0; }
template int StackDA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template void StackDA::Sort(void)
{ for(int i=0;i
for(int j=i+1;j
if(*data[j]>*data[i])
{ T *temp=data[j];data[j]=data[i];data[i]=temp; } } //
обмен
template StackDA::~StackDA(void)
{ delete data; }
void main()
{ StackDA 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 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 StackDA::StackDA(int _size)
{ size=_size;
data=(T**)new char[size*sizeof(T*)]; //выделение памяти под
МУ
sp=0; }
template int StackDA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template void StackDA::Sort(void)
{ for(int i=0;i
for(int j=i+1;j
if(*data[j]>*data[i])
{ T *temp=data[j];data[j]=data[i];data[i]=temp; } } //
обмен
template T *StackDA::FindBin(T &key)
{ int a=0,b=sp-1; //начало,конец отрезка
while(a<=b)
{ int m=(a+b)/2; //середина
if(*data[m]==key) return data[m]; //совпало с ключом
if(*data[m]>key) a=m+1; //правая часть
else b=m-1; }//левая
часть
return NULL; } //не найден
template StackDA::~StackDA(void)
{ delete data; }
void main()
{ StackDA s(20); //стек из 20-ти указателей на int
int a=13,b=5,c=7,d=13;
s.Push(a); s.Push(b); s.Push(c); //укладываем данные
s.Sort(); int *k=s.FindBin(d); } //поиск
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 1. хранение указателей на объекты
// 5. включение элемента по номеру
template class StackDA
{ private:
T **data; //динамический МУ на данные
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
int Insert(T &element,int num); //включение по номеру
//результат:если нельзя то [-1]
//иначе, количество
элементов
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T**)new char[size*sizeof(T*)]; //выделение памяти под
МУ
sp=0; }
template int StackDA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template int StackDA::Insert(T &element,int num)
return sp;
template StackDA::~StackDA(void)
{ delete data; }
void main()
{ StackDA s(20); //стек из 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();}//вытаскиваем эл-ты
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 1. хранение указателей на объекты
// 6. исключение элемента по номеру
template class StackDA
{ private:
T **data; //динамический МУ на данные
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
T *Exclude(int num); //исключение по номеру
//результат:если нельзя то [NULL]
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T**)new char[size*sizeof(T*)]; //выделение памяти под
МУ
sp=0; }
template int StackDA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template T *StackDA::Exclude(int num)
template StackDA::~StackDA(void)
{ delete data; }
void main()
{ StackDA s(20); //стек из 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();}//вытаскиваем эл-ты
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 1. хранение указателей на объекты
// 7. поиск и возвращение элемента по номеру
template class StackDA
{ private:
T **data; //динамический МУ на данные
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
T *operator[](int num); //взятие по номеру
//результат:если нельзя то [NULL]
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T**)new char[size*sizeof(T*)]; //выделение памяти под
МУ
sp=0; }
template int StackDA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template T *StackDA::operator[](int num)
большой
template StackDA::~StackDA(void)
{ delete data; }
void main()
{ StackDA s(20); //стек из 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();}//вытаскиваем эл-ты
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 2. хранение объектов
// 1. включение элемента с сохранением упорядоченности
template class StackDA
{ private:
T *data;
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T*)new T[size]; //выделение памяти
sp=0; }
template int StackDA::Push(T element)
{ if(sp==size) return -1; //стек полный
for(int k=0;k
for(int p=++sp;p>k;p--) data[p]=data[p-1];
data[k]=element;
return sp; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return &data[--sp]; }
template StackDA::~StackDA(void)
{ delete [] data; }
void main()
{ StackDA s(20); //стек из 20-ти int
s.Push(27); s.Push(13); s.Push(19); //укладываем данные
int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();
}//вытаскиваем упорядоченные
//по возрастанию эл-ты
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 2. хранение объектов
// 2. поиск и возвращение минимального объекта
template 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 StackDA::StackDA(int _size)
{ size=_size;
data=(T*)new T[size]; //выделение памяти
sp=0; }
template int StackDA::Push(T element)
{ if(sp==size) return -1; //стек полный
data[sp]=element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return &data[--sp]; }
template StackDA::~StackDA(void)
{ delete [] data; }
template T *StackDA::FindMin(void)
{ if(sp==0) return NULL; //стек пустой
int min=data[0];
for(int k=1;k
return &data[min]; }
void main()
{ StackDA s(20); //стек из 20-ти int
s.Push(55); s.Push(11); s.Push(33); //укладываем данные
int *m=s.FindMin(); } // поиск мин.
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 2. хранение объектов
// 3. сортировка(любым методом)
template 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 StackDA::StackDA(int _size)
{ size=_size;
data=(T*)new T[size]; //выделение памяти
sp=0; }
template int StackDA::Push(T element)
{ if(sp==size) return -1; //стек полный
data[sp]=element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return &data[--sp]; }
template void StackDA::Sort(void)
{ for(int i=0;i
for(int j=i+1;j
if(data[j]>data[i])
{ T temp=data[j];data[j]=data[i];data[i]=temp; } } //
обмен
template StackDA::~StackDA(void)
{ delete [] data; }
void main()
{ StackDA s(20); //стек из 20-ти int
s.Push(35); s.Push(17); s.Push(29); //укладываем данные
s.Sort();
int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();}//вытаскиваем упорядоченные
//по возрастанию эл-ты
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 2. хранение объектов
// 4. двоичный поиск по ключу
template 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 StackDA::StackDA(int _size)
{ size=_size;
data=(T*)new T[size]; //выделение памяти
sp=0; }
template int StackDA::Push(T element)
{ if(sp==size) return -1; //стек полный
data[sp]=element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return &data[--sp]; }
template void StackDA::Sort(void)
{ for(int i=0;i
for(int j=i+1;j
if(data[j]>data[i])
{ T temp=data[j];data[j]=data[i];data[i]=temp; } } //
обмен
template T *StackDA::FindBin(T key)
{ int a=0,b=sp-1; //начало,конец отрезка
while(a<=b)
{ int m=(a+b)/2; //середина
if(data[m]==key) return &data[m]; //совпало с ключом
if(data[m]>key) a=m+1; //правая часть
else b=m-1; }//левая часть
return NULL; } //не найден
template StackDA::~StackDA(void)
{ delete [] data; }
void main()
{ StackDA s(20); //стек из 20-ти int
s.Push(78); s.Push(10); s.Push(5); //укладываем данные
s.Sort(); int *k=s.FindBin(78); } //поиск
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 2. хранение объектов
// 5. включение элемента по номеру
template class StackDA
{ private:
T *data;
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
int Insert(T element,int num); //включение по номеру
//результат:если нельзя то [-1]
//иначе, количество
элементов
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T*)new T[size]; //выделение памяти
sp=0; }
template int StackDA::Push(T element)
{ if(sp==size) return -1; //стек полный
data[sp]=element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return &data[--sp]; }
template int StackDA::Insert(T element,int num)
template StackDA::~StackDA(void)
{ delete []data; }
void main()
{ StackDA s(20); //стек из 20-ти int
s.Push(99); s.Push(45); //укладываем данные
s.Insert(33,1); //вставляем элемент
int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop();}//вытаскиваем эл-ты
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 2. хранение объектов
// 6. исключение элемента по номеру
template class StackDA
{ private:
T *data;
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
void Exclude(int num); //исключение по номеру
//результат:если нельзя то [NULL]
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T*)new T[size]; //выделение памяти
sp=0; }
template int StackDA::Push(T element)
{ if(sp==size) return -1; //стек полный
data[sp]=element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return &data[--sp]; }
template void StackDA::Exclude(int num)
num<0)return;//стек пустой или номер слишком
template StackDA::~StackDA(void)
{ delete [] data; }
void main()
{ StackDA s(20); //стек из 20-ти int
s.Push(35); s.Push(11); s.Push(89); //укладываем данные
s.Exclude(1); //вытаскиваем элемент
int *pa=s.Pop(),*pb=s.Pop(),*pc=s.Pop(); }//вытаскиваем эл-ты
//----------------------------------------------------------------------
------
// 1. стек представлен динамическим массивом
// 2. хранение объектов
// 7. поиск и возвращение элемента по номеру
template class StackDA
{ private:
T *data;
int size,sp; //размер стека,кол-во элементов
public:
StackDA(int _size);
int Push(T element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
T *operator[](int num); //взятие по номеру
//результат:если нельзя то [NULL]
~StackDA(void); };
template StackDA::StackDA(int _size)
{ size=_size;
data=(T*)new T[size]; //выделение памяти
sp=0; }
template int StackDA::Push(T element)
{ if(sp==size) return -1; //стек полный
data[sp]=element;
return sp++; }
template T *StackDA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return &data[--sp]; }
template T *StackDA::operator[](int num)
return &data[num];
template StackDA::~StackDA(void)
{ delete []data; }
void main()
{ StackDA s(20); //стек из 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();}//вытаскиваем эл-ты
//----------------------------------------------------------------------
------
// 2. стек представлен статическим массивом
// 1. хранение указателей на объекты
// 1. включение элемента с сохранением упорядоченности
template class StackSA
{ private:
T *data [size]; //cтатический МУ на
данные
int sp; //кол-во элементов
public:
StackSA();
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void);}; //результат:если стек пустой то [NULL]
template StackSA::StackSA()
{ sp=0; }
template int StackSA::Push(T &element)
{ if(sp==size) return -1; //стек полный
for(int k=0;k
for(int p=++sp;p>k;p--) data[p]=data[p-1];
data[k]=&element;
return sp; }
template T *StackSA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
void main()
{ StackSA s; //стек из 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();}//вытаскиваем упорядоченные
//по возрастанию эл-ты
//----------------------------------------------------------------------
------
// 2. стек представлен cтатическим массивом
// 1. хранение указателей на объекты
// 2. поиск и возвращение минимального объекта
template class StackSA
{ private:
T *data[size]; //cтатический МУ на
данные
int sp; //кол-во элементов
public:
StackSA();
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
T *FindMin(void);};
template StackSA::StackSA()
{ sp=0; }
template int StackSA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackSA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template T *StackSA::FindMin(void)
{ if(sp==0) return NULL; //стек пустой
T *min=data[0];
for(int k=1;k
return min; }
void main()
{ StackSA s; //стек из 20-ти указателей на int
int a=13,b=5,c=7;
s.Push(a); s.Push(b); s.Push(c); //укладываем данные
int *m=s.FindMin();} // поиск мин.
//----------------------------------------------------------------------
------
// 2. стек представлен cтатическим массивом
// 1. хранение указателей на объекты
// 3. сортировка(любым методом)
template class StackSA
{ private:
T *data[size]; //статический МУ на
данные
int sp; //размер стека,кол-во элементов
public:
StackSA();
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
void Sort(void);};
template StackSA::StackSA()
{ sp=0; }
template int StackSA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackSA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template void StackSA::Sort(void)
{ for(int i=0;i
for(int j=i+1;j
if(*data[j]>*data[i])
{ T *temp=data[j];data[j]=data[i];data[i]=temp; } } //
обмен
void main()
{ StackSA s; //стек из 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();
}//вытаскиваем упорядоченные
//по возрастанию эл-ты
//----------------------------------------------------------------------
------
// 2. стек представлен статическим массивом
// 1. хранение указателей на объекты
// 4. двоичный поиск по ключу
template class StackSA
{ private:
T *data[size]; //статический МУ на
данные
int sp; //кол-во элементов
public:
StackSA();
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
void Sort(void);
T *FindBin(T &key);}; //двоичный поиск
template StackSA::StackSA()
{ sp=0; }
template int StackSA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackSA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template void StackSA::Sort(void)
{ for(int i=0;i
for(int j=i+1;j
if(*data[j]>*data[i])
{ T *temp=data[j];data[j]=data[i];data[i]=temp; } } //
обмен
template T *StackSA::FindBin(T &key)
{ int a=0,b=sp-1; //начало,конец отрезка
while(a<=b)
{ int m=(a+b)/2; //середина
if(*data[m]==key) return data[m]; //совпало с ключом
if(*data[m]>key) a=m+1; //правая часть
else b=m-1; }//левая
часть
return NULL; } //не найден
void main()
{ StackSA s; //стек из 20-ти указателей на int
int a=13,b=5,c=7,d=13;
s.Push(a); s.Push(b); s.Push(c); //укладываем данные
s.Sort(); int *k=s.FindBin(d);} //поиск
//----------------------------------------------------------------------
------
// 2. стек представлен статическим массивом
// 1. хранение указателей на объекты
// 5. включение элемента по номеру
template class StackSA
{ private:
T *data[size]; //статический МУ на
данные
int sp; //кол-во элементов
public:
StackSA();
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
int Insert(T &element,int num); //включение по номеру
//результат:если нельзя то [-1]
}; //иначе, количество
элементов
template StackSA::StackSA()
{ sp=0; }
template int StackSA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackSA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template int StackSA::Insert(T &element,int
num)
void main()
{ StackSA 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 StackSA
{ private:
T *data[size]; //статический МУ на
данные
int sp; //кол-во элементов
public:
StackSA();
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
T *Exclude(int num); //исключение по номеру
}; //результат:если нельзя то [NULL]
template StackSA::StackSA()
{ sp=0; }
template int StackSA::Push(T &element)
{ if(sp==size) return -1; //стек полный
data[sp]=&element;
return sp++; }
template T *StackSA::Pop(void)
{ if(sp==0) return NULL; //стек пустой
return data[--sp]; }
template T *StackSA::Exclude(int num)
num>=sp
void main()
{ StackSA 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 StackSA
{ private:
T *data; //статический МУ на данные
int sp; //кол-во элементов
public:
StackSA();
int Push(T &element); //результат:если стек полный то [-1]
//иначе, количество
элементов
T *Pop(void); //результат:если стек пустой то [NULL]
T *operator[](int num); //взятие по номеру
}; //результат:если нельзя то [NULL]
template StackSA | |