//实现栈的功能模板: 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;
}
};