模板栈的实现 (Template Stack)

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

#define EXIT getchar(); exit(1)
template struct TNode			//1.节点结构体
{
	T data;
	TNode* pTail;
};
template class TStack	//2.栈模板
{
private:
	TNode* 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* pTemp = new TNode();
		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* 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* 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* pTemp = m_pHead;
		while (pTemp)
		{
			cout << pTemp->data << "	";
			pTemp = pTemp->pTail;
		}
		pTemp = NULL;
	}
};


 

 

你可能感兴趣的:(数据结构,(Data,Structure))