チェーンテーブルストレージ実装スタック
基本原理は次のとおりです.
スタックに入るときは、先頭ノードと最初のノードを取り外し、スタック要素ノードに挿入します.
スタックを出るときに、最初のノードを削除します.
スタックに入るときは、先頭ノードと最初のノードを取り外し、スタック要素ノードに挿入します.
スタックを出るときに、最初のノードを削除します.
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;
}
};