myStack.h

#ifndefMYSTACK_H_INCLUDED#defineMYSTACK_H_INCLUDED#include"myList.h"#include"myTree.h"typedefstructtag_myStack{intdata;myTree*pTree;structlist_headstStack;}myStack;myStack*getNewNode();voidinitStack(myStack*pRoot);voiddestoryStack(myStack*pRoot);intgetStackLen(myStack*pRoot);intisStackEmpty(myStack*pRoot);voidstackPush(myStack*pRoot,myStack*pNew);myStack*stackPop(myStack*pRoot);#endif//MYSTACK_H_INCLUDED

myStack.c

#include"myStack.h"#include"malloc.h"myStack*getNewNode(){myStack*pTmp=NULL;pTmp=(myStack*)malloc(sizeof(myStack));if(NULL==pTmp){returnNULL;}pTmp->data=0;pTmp->pTree=NULL;INIT_LIST_HEAD(&(pTmp->stStack));returnpTmp;}voidinitStack(myStack*pRoot){pRoot->data=0;pRoot->pTree=NULL;INIT_LIST_HEAD(&(pRoot->stStack));return;}voiddestoryStack(myStack*pRoot){structlist_head*pos=NULL;structlist_head*n=NULL;myStack*pstStack=NULL;list_for_each_safe(pos,n,&(pRoot->stStack)){list_del(pos);pstStack=list_entry(pos,myStack,stStack);free(pstStack);pos=n;}return;}intgetStackLen(myStack*pRoot){intlen=0;structlist_head*pos=NULL;list_for_each(pos,&(pRoot->stStack)){len++;}returnlen;}intisStackEmpty(myStack*pRoot){returnlist_empty(&(pRoot->stStack));}voidstackPush(myStack*pRoot,myStack*pNew){list_add_tail(&(pNew->stStack),&(pRoot->stStack));}myStack*stackPop(myStack*pRoot){myStack*pstStack=NULL;structlist_head*pTmp=NULL;if(!isStackEmpty(pRoot)){pTmp=(pRoot->stStack).prev;list_del((pRoot->stStack).prev);pstStack=list_entry(pTmp,myStack,stStack);returnpstStack;}returnNULL;}

main.c

#include"myStack.h"#include"malloc.h"myStack*getNewNode(){myStack*pTmp=NULL;pTmp=(myStack*)malloc(sizeof(myStack));if(NULL==pTmp){returnNULL;}pTmp->data=0;pTmp->pTree=NULL;INIT_LIST_HEAD(&(pTmp->stStack));returnpTmp;}voidinitStack(myStack*pRoot){pRoot->data=0;pRoot->pTree=NULL;INIT_LIST_HEAD(&(pRoot->stStack));return;}voiddestoryStack(myStack*pRoot){structlist_head*pos=NULL;structlist_head*n=NULL;myStack*pstStack=NULL;list_for_each_safe(pos,n,&(pRoot->stStack)){list_del(pos);pstStack=list_entry(pos,myStack,stStack);free(pstStack);pos=n;}return;}intgetStackLen(myStack*pRoot){intlen=0;structlist_head*pos=NULL;list_for_each(pos,&(pRoot->stStack)){len++;}returnlen;}intisStackEmpty(myStack*pRoot){returnlist_empty(&(pRoot->stStack));}voidstackPush(myStack*pRoot,myStack*pNew){list_add_tail(&(pNew->stStack),&(pRoot->stStack));}myStack*stackPop(myStack*pRoot){myStack*pstStack=NULL;structlist_head*pTmp=NULL;if(!isStackEmpty(pRoot)){pTmp=(pRoot->stStack).prev;list_del((pRoot->stStack).prev);pstStack=list_entry(pTmp,myStack,stStack);returnpstStack;}returnNULL;}