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

本文详细介绍了如何使用链表实现栈的数据结构,并提供了一个模板化的类库,包括链表节点类和栈类的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做完单链表,顺便实现个栈。加了个模板。

#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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值