/////////////////////////////////////////////////////////////////////////
// Definition of class CStack //
// CStack.h //
////////////////////////////////////////////////////////////////////////////
const int INITSIZE = 100;
const int INCREMENT= 10;
template <class T>
class CStack
{
public:
CStack()
{
entry = new T[INITSIZE];
assert(entry);
nSize = INITSIZE;
nTop = -1;
}
CStack(int nInitSize)
{
entry = new T[nInitSize];
assert(entry);
nSize = nInitSize;
nTop = -1;
}
~CStack()
{
if(entry != NULL)
{
delete []entry;
}
nSize = 0;
nTop = -1;
}
void Push(T item)
{
if(nTop >= nSize - 1)
{
T *p;
p = new T[nSize+INCREMENT];
assert(p);
memcopy((void*)p, (void*)entry, sizeof(T)*(nSize));
delete []entry;
entry = p;
nSize += INCREMENT;
}
entry[nTop++] = item;
}
T Pop()
{
return (entry[nTop--]);
}
T Top()
{
return (entry[nTop]);
}
bool IsEmpty()
{
return (nTop < 0);
}
private:
T *entry; // 栈的存储空间
int nSize; // 栈的大小
int nTop; // 栈顶位置
};
评论