您的位置:首页 > 理论基础 > 数据结构算法

C++数据结构栈Stack的实现模板类

2015-10-27 20:44 441 查看
做完单链表,顺便实现个栈。加了个模板。

#ifndef _STACK_H
#define _STACK_H

// 定义链表栈类
template <class T>
class Node
{
public:
Node() { next = NULL; }
Node(T elem) { data = elem; next = NULL; }
T data; //栈存储的元素
Node* next; //指向下一结点的指针
};

template <class T>
class Stack
{
public:
Stack();
~Stack();
public:
void push(T elem); // 进栈
T pop(); // 出栈
bool isEmpty(); //判断栈是否为空
T getTop(); // 获得栈顶元素
void clear();
private:
Node<T>* m_Top; // 栈顶
Node<T>* m_Bottom; // 栈底
};

template <class T>
void Stack<T>::clear()
{
if (isEmpty())
{
return;
}
Node<T> * tmp = m_Top;
while (m_Top != m_Bottom)
{
tmp = m_Top;
delete m_Top;
m_Top = tmp->next;
}
delete m_Top;
m_Top = NULL;
m_Bottom = NULL;
}

template <class T>
T Stack<T>::getTop()
{
return m_Top->data;
}

template <class T>
T Stack<T>::pop()
{
if (isEmpty())
{
return NULL;
}

T elem = m_Top->data;
Node<T>* tmp = m_Bottom;
while (tmp->next!=m_Top)
{
tmp = tmp->next;
}
delete m_Top;
m_Top = tmp;
return elem;
}

template <class T>
void Stack<T>::push(T elem)
{
if (isEmpty())
{
m_Bottom = new Node<T>(elem);
m_Top = m_Bottom;
}
else
{
m_Top->next = new Node<T>(elem);
m_Top = m_Top->next;
}
}

template <class T>
bool Stack<T>::isEmpty()
{
return m_Top == NULL;
}

template <class T>
Stack<T>::~Stack()
{
Node<T> * tmp = m_Top;
while (m_Top != m_Bottom)
{
tmp = m_Top;
delete m_Top;
m_Top = tmp->next;
}
delete m_Top;
m_Top = NULL;
m_Bottom = NULL;
}

template<class T>
inline Stack<T>::Stack()
{
m_Bottom = new Node<T>();
m_Top = m_Bottom;
m_Top->next = NULL;
m_Bottom->next = NULL;
}

#endif // _STACK_H
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: