Скачиваний:
13
Добавлен:
01.05.2014
Размер:
1.65 Кб
Скачать
// 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