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
#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
相关文章推荐
- 串,模式匹配Index
- 【串项目4-字符串加密——第8周】
- redis基本数据结构(1)
- Python: 实现bitmap数据结构
- 第七周数据结构之自建算法库——顺序环形队列【项目2 - 建立链队算法库】
- 第七周数据结构之自建算法库——顺序环形队列【项目1 - 建立顺序环形队列算法库】
- Java 数据结构
- 数据结构 — 4.删除单链表中所有值大于mink且小于maxk的元素
- 数据结构 — 3.模式匹配
- 数据结构 — 2.顺序表删除问题
- 数据结构 — 1. 两个非递减有序单链表合并为非递增有序单链表
- 线性表的顺序表示和实现(数据结构)
- 数据结构之栈和队列(三)
- 神经网络数据结构
- 数据结构与算法概述
- 数据结构之线性表(二)
- 数据结构之线性表(一)
- 数据结构之---树
- 算法导论14.2如何扩张数据结构 练习总结
- PHP 标准库 SPL 之数据结构栈(SplStack)简单实践