模板栈的实现 (Template Stack)

 
//实现栈的功能模板:	1.节点结构体;2.栈模板

#define EXIT getchar(); exit(1)
template<class T> struct TNode			//1.节点结构体
{
	T data;
	TNode<T>* pTail;
};
template<class T = int> class TStack	//2.栈模板
{
private:
	TNode<T>* m_pHead;
	int m_count;
	int m_maxSize;
public:
	TStack(int maxSize = 10)//构造函数
	{
		m_count = 0;
		m_maxSize = maxSize;
		m_pHead = NULL;
	}
	int getCount()const
	{
		return m_count;
	}
	int getMaxSize()const
	{
		return m_maxSize;
	}
	bool isFull() const
	{
		return (m_count>=m_maxSize)?true:false;
	}
	bool isEmpty()
	{
		return m_count <= 0 ? true:false;
	}
	void pushStack(const T data)//压栈、入栈
	{
		if (isFull())
		{
			cout << "栈满,可以改变最大容量后再压栈!" << endl;
			return;
		}
		TNode<T>* pTemp = new TNode<T>();
		if (pTemp == NULL)
		{
			cout << "分配堆内存失败!" << endl;
			EXIT;
		}
		pTemp->data = data;
		pTemp->pTail = m_pHead;
		m_pHead = pTemp;
		m_count++;
	}
	bool popStack()//弹栈、出栈
	{
		if (isEmpty())
		{
			cout << "空栈,无法弹栈!" << endl;
			return false;
		}
		TNode<T>* pTemp = m_pHead;
		m_pHead = m_pHead->pTail;
		delete pTemp;
		pTemp = NULL;
		m_count--;
		return true;
	}
	const T& operator[](int index)const
	{
		if (index < 0 || index > m_count - 1)
		{
			cout << "索引错误" << endl;
			EXIT;
		}
		TNode<T>* pTemp = m_pHead;
		while (index--)
		{
			pTemp = pTemp->pTail;
		}
		return pTemp->data;
		
	}
	const T getTopStack() const//得到栈顶元素
	{
		return m_pHead ? (m_pHead->data) : -1111111;
	}
	void listStackNode()const
	{
		cout << "从栈顶到栈底: " << endl;
		TNode<T>* pTemp = m_pHead;
		while (pTemp)
		{
			cout << pTemp->data << "	";
			pTemp = pTemp->pTail;
		}
		pTemp = NULL;
	}
};


 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值