
Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая работа. Вариант 16 / kurs / STACK
.H// STACK.H
// ЋЇаҐ¤Ґ«ҐЁҐ и Ў«® Є« бб Stack
#ifndef STACK_H
#define STACK_H
#include <assert.h>
template <class T>
class StackNode {
friend class Stack<T>;
public:
StackNode(const T, StackNode*);
T getData() const;
private:
T data;
StackNode* nextPtr;
};
template <class T>
StackNode<T>::StackNode(const T d, StackNode<T> *ptr)
{
data = d;
nextPtr = ptr;
}
template <class T>
T StackNode<T>::getData() const
{
return data;
}
//----
template <class T>
class Stack {
public:
Stack(); // Є®бвагЄв®а Ї® 㬮«з Ёо
~Stack(); // ¤ҐбвагЄв®а
void push(T); // Ї®¬ҐбвЁвм н«Ґ¬Ґв ў б⥪
T pop(); // ўлв®«Єгвм н«Ґ¬Ґв Ё§ б⥪
int is_empty() const; // Їа®ўҐаЄ б⥪ Їгбв®вг
private:
StackNode<T> *topPtr; // гЄ § вҐ«м ўҐаиЁг б⥪
};
template <class T>
Stack<T>::Stack()
{
topPtr = 0;
}
template <class T>
Stack<T>::~Stack()
{
StackNode<T> *tempPtr, *currentPtr = topPtr;
while (currentPtr != 0) {
tempPtr = currentPtr;
currentPtr = currentPtr->nextPtr;
delete tempPtr;
}
}
template <class T>
void Stack<T>::push(T d)
{
StackNode<T>* newPtr = new StackNode<T>(d, topPtr);
assert(newPtr != 0); // Ўл« «Ё ўл¤Ґ«Ґ Ї ¬пвм ?
topPtr = newPtr;
}
template <class T>
T Stack<T>::pop()
{
assert(!is_empty());
StackNode<T> *tempPtr = topPtr;
topPtr = topPtr->nextPtr;
T poppedValue = tempPtr->data;
delete tempPtr;
return poppedValue;
}
template <class T>
int Stack<T>::is_empty() const
{
return topPtr == 0;
}
#endif
Соседние файлы в папке kurs