c++链栈模板
// DZ_Stack.h: interface for the DZ_Stack class.
//
/**///////////////////////////////////////////////////////////////////////
#if !defined(AFX_DZ_STACK_H__10036803_D752_4EF7_852D_DD6B377D7AB9__INCLUDED_)
#define AFX_DZ_STACK_H__10036803_D752_4EF7_852D_DD6B377D7AB9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/**//************************************************************************/
/**//*独奏者 2009-09-02
/*
/*说明: 栈模板
/*
/*功能: 链表栈
/* 1,入栈 Push
/* 2,出栈 Pop
/* 3,取栈顶 Peek
/* 4,是否栈空 IsEmpty
/* 4,栈中数据个数 GetNodeCount
/*
/************************************************************************/
//模板声明
template <class T>
struct StackNode
{
T typeData;
StackNode *nextNode;
};
template <class T>
class DZ_Stack
{
public:
bool Push(const T data);
bool Pop(T& data);
bool Peek(T& data);
bool IsEmpty();
DZ_Stack();
virtual ~DZ_Stack();
private:
StackNode<T> *pStackTop;
int iNodeCount;
};


//模板实现
template <class T>
DZ_Stack<T>::DZ_Stack()
{
pStackTop=NULL;
iNodeCount=0;
}
template <class T>
DZ_Stack<T>::~DZ_Stack()
{
while(!IsEmpty())
{
StackNode<T> *pStackNode= pStackTop;
pStackTop=pStackTop->nextNode;
delete (pStackNode);
pStackNode=NULL;
}
pStackTop=NULL;
}
template <class T>
bool DZ_Stack<T>::Push(const T data)
{
StackNode<T> *pStackNode=new StackNode<T>;
if( NULL == pStackNode )
return false;
pStackNode->typeData=data;
pStackNode->nextNode=pStackTop;
pStackTop=pStackNode;
iNodeCount++;
return true;
}
template <class T>
bool DZ_Stack<T>::Pop(T& data)
{
if ( IsEmpty() )
return false;
data=pStackTop->typeData;
StackNode<T> *pStackNode= pStackTop;
pStackTop=pStackTop->nextNode;
delete (pStackNode);
iNodeCount--;
return true;
}
template <class T>
bool DZ_Stack<T>::Peek(T& data)
{
if (IsEmpty())
return false;
data=pStackTop->typeData;
return true;
}
template <class T>
bool DZ_Stack<T>::IsEmpty()
{
if ( NULL == pStackTop )
return true;
else
return false;
}
#endif // !defined(AFX_DZ_STACK_H__10036803_D752_4EF7_852D_DD6B377D7AB9__INCLUDED_)



浙公网安备 33010602011771号