チェーンテーブルストレージ実装スタック


基本原理は次のとおりです.
スタックに入るときは、先頭ノードと最初のノードを取り外し、スタック要素ノードに挿入します.
スタックを出るときに、最初のノードを削除します.
 class CStackLinkList
{
private:
    SNode* pCStackLinkListHeader;
    int nLinkListNodeSize;
public:
    CStackLinkList()
    {
        pCStackLinkListHeader=NULL;
        nLinkListNodeSize=0;
    }
    ~CStackLinkList()
    {
        //judge header pointer is null and return
        if(NULL==pCStackLinkListHeader) return;
        //I can use pop function to delete all node
        int tmp=0;
        while(PopStack(tmp)==0)
        {
            cout<<"Now free node value="<<tmp<<endl;
        }
        cout<<"Now empty all node and release all resource"<<endl;
    }
    int PushStack(int nPuashStackValue)
    {
        //allocate node memory
        SNode* pSNode=(SNode*)malloc(sizeof(SNode));
        //judge whether the pointer is not NULL
        if(NULL==pSNode)    return -1;
        //assign value to node
        pSNode->nNodeValue=nPuashStackValue;
        //define tmpNode pointer to store header
        SNode* pTmpNode=pCStackLinkListHeader;
        //insert this node between header pointer and the first node pointer
        pCStackLinkListHeader=pSNode;
        pSNode->pNextNode=pTmpNode;
        //node count increase one
        nLinkListNodeSize=nLinkListNodeSize+1;
        return 0;
    }
    int PopStack(int& nPopStackValue)
    {
        //if linklist header pointer is null,and return -1
        if(NULL==pCStackLinkListHeader) return -1;
        //define tmpnode store header pointer
        SNode* pTmpNode=pCStackLinkListHeader;
        //take apart linklist
        //nPopStackValue=pCStackLinkListHeader->nNodeValue;
        //pCStackLinkListHeader=pCStackLinkListHeader->pNextNode;
        nPopStackValue=pTmpNode->nNodeValue;
        pCStackLinkListHeader=pTmpNode->pNextNode;
        nLinkListNodeSize=nLinkListNodeSize-1;
        free(pTmpNode);
        pTmpNode=NULL;
        return 0;
    }
    int GetTop(int& nStackTopValue)
    {
        if(NULL==pCStackLinkListHeader) return -1;
        nStackTopValue=pCStackLinkListHeader->nNodeValue;
        return 0;
    }
};