更新时间:2015-06-23 22:57:08浏览次数:1+次
这些代码需要在一个头文件中,类成员函数独立放在一个文件中需要编译器支持export关键字。
栈底指针指向栈的第一个元素且只指向这个元素,如果栈顶和栈底指针重合则栈空,如果栈顶指针与栈底指针偏移量为栈构件时的给定的大小,则栈满。
#include <iostream>
using namespace std;
template<class T>
class Stack
{
protected:
T * m_pButtom,*m_pTop;//栈底和栈顶指针
int m_ItemNum;//栈大小
public:
Stack(int ItemNum=20);//默认构造20个元素大小的栈
~Stack();
T Pop();//弹出最顶元素,指针下移
void Push(const T Item);//压入栈中一个元素
bool IsEmpty(){return m_pButtom==m_pTop;};//栈是否为空
bool IsFull(){return m_pTop - m_pButtom==m_ItemNum;}//栈是否已满
};
template<class T>
Stack<T>::Stack(int ItemNum)
{
m_pButtom = m_pTop =NULL;
m_ItemNum = ItemNum;
m_pButtom = (T*)malloc(ItemNum*sizeof(T));
if (!m_pButtom)
{
cerr<<"allocate memory failed!\n";
m_ItemNum = 0;
return;
}
memset(m_pButtom,0,ItemNum);
m_pTop = m_pButtom;
}
template<class T>
Stack<T>::~Stack()
{
if (m_pButtom)
{
delete m_pButtom;
m_pButtom = m_pTop=NULL;
m_ItemNum=0;
}
}
template<class T>
T Stack<T>::Pop()
{
if (!IsEmpty())
{
--m_pTop;
T temp = *m_pTop;
return temp;
}
return 0;
}
template<class T>
void Stack<T>::Push(const T Item)
{
if (!IsFull())
{
*m_pTop = Item;
++m_pTop;
}
}