zhan.txt

来自「用栈实现二叉数的遍历 其中构造的栈是一个动态的栈」· 文本 代码 · 共 132 行

TXT
132
字号
#include<stdio.h>
#include<malloc.h>
#define struct_sizes 20
#define adds 10 

typedef struct bitnode
{ 
char data;
struct bitnode *lchild,*rchild;
}*bitree; 


typedef struct 

{ 
bitree *base;
bitree *top;
int stacksize; 
}sqstack; 

int initstack(sqstack *S)
{ 
S->base=(bitree *)malloc(struct_sizes*sizeof(bitnode));
if(!S->base)return 0;
S->top = S->base;
S->stacksize = struct_sizes;
return 1; 
}

int stackempty(sqstack *S)

{ 
if(S->base==S->top)return 1;
else return 0; 
} 

int push(sqstack *S,bitree e)
{ 
if(S->top - S->base >= S->stacksize)
{ 
S->base = (bitree *)realloc(S->base,(S->stacksize + adds) * sizeof (bitree));
if(!S->base)return 0;
S->top = S->base + S->stacksize;
S->stacksize += adds;
} 
*(S->top++)=e;
return 1; 
}

int pop(sqstack *S,bitree &e)
{ 
if(S->top == S->base)return 0;
e = * --S->top;

return 1; 
}

int gettop(sqstack *S,bitree &e)
{ 
if(S->top == S->base) return 0;
e = *(S->top - 1);

return 1; 
}

void createBinTree(bitree &t)

{

       t=(bitree)malloc(sizeof bitnode);

       char c;

       scanf("%c",&c);

       if(c==' ')

              t=NULL;

       else

       {

              t->data=c;

              createBinTree(t->lchild);

              createBinTree(t->rchild);

       }

}
int InOrder(bitree T)
 { if(T)
 {
   InOrder( T->lchild);
   printf("%c ",T->data);
   InOrder( T->rchild);
   } return 1;
 }
 int mid_norecursion(bitree T,sqstack *S)

{ 

bitree p;
p=T; 
if(!T)return 0; 
initstack(S);
push(S,T);
while(!stackempty(S)) 
{ 
while(gettop(S,p)&&p)
push(S,p->lchild);
pop(S,p);
if(!stackempty(S))
{ 
pop(S,p);printf(" %c",p->data); 
push(S,p->rchild); 
} 
} 
return 1; 
}
 void main()
{bitree a;
 createBinTree(a);

 sqstack S;

 
 mid_norecursion(a,&S);

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?