以下是定义的堆栈
typedef struct{
int *base;
int *top;
int stacksize;
}SQSTACK;
int Push(SQSTACK &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base)return error;
S.top=S.base+S.stacksize;// 申明新的基地址
S.stacksize+=STACKINCREMENT;//length
}
*S.top++=e;
return ok;
}
int Pop(SQSTACK &S,int e)
{
if(S.base==S.top)return error;
e=*(--S.top);
return e;
}
以下是前序非递归遍历
typedef struct BiTNode{
char data;
struct BiTNode *lchild;
struct BiTNode *rchild;
} BiTNode,*Bitree;
void PreOrder(Bitree T) //前序
{SQSTACK S;
Bitree p;
InitStack(S);
Push(S,T);
while(!StackEmpty(S))
{Pop(S,p);visit(p->data);
if(p->rchild!=NULL)Push(S,p->rchild);
if(p->lchild!=NULL)Push(S,p->lchild);
}}
: error C2664: 'Push' : cannot convert parameter 2 from 'struct BiTNode *' to 'int'