#ifndef STACK_H
#define STACK_H
#include<memory>
using namespace std;
template<typename T>
class Stack;
template<typename T>
class Node
{
public:
Node(const T &item):data(item),next(0){} //必须把next置0,否则在stack析构时会有问题
friend class Stack<T>;
private:
T data;
Node *next;
};
template<typename T>
class Stack
{
public:
Stack():_top(0),_size(0){}
~Stack();
void push(const T& item); //向栈顶压入元素
T& top(); //读取栈顶元素
void pop(); //删除栈顶元素
bool empty(); //判断栈是否为空
int size(){return _size;} //读取栈大小
private:
Node<T> *_top;
int _size;
};
template<typename T>
Stack<T>::~Stack()
{
Node<T> *p;
while(_top)
{
p = _top->next;
delete _top;
_top = p;
}
};
template<typename T>
void Stack<T>::push(const T& item)
{
if(empty())
{
_top = new Node<T>(item);
_size++;
return;
}
Node<T> *p = new Node<T>(item);
Node<T> *q = _top;
_top = p;
_top->next = q;
_size++;
}
template<typename T>
void Stack<T>::pop()
{
if(empty())
{
cerr<<"Out of bounds!/n";
exit(-1);
}
Node<T> *p = _top->next;
delete _top;
_top = p;
_size --;
}
template<typename T>
bool Stack<T>::empty()
{
return _size == 0;
}
template<typename T>
T& Stack<T>::top()
{
if(empty())
{
cerr<<"Out of bounds!/n";
exit(-1);
}
return _top->data;
}
#endif
C++堆栈模板类
最新推荐文章于 2017-07-09 23:42:34 发布