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_)
posted @ 2009-09-02 23:13  独奏者  阅读(1462)  评论(0编辑  收藏  举报