正在加载图片...
if(S top==S base)return ERROR =*(S.top-1) --S. top: Status Set TopElem(SqStack &S, ElemType e) ∥/将栈顶元素的值修改为e,书中未设此操作,可根据需要新设 if(S top==S base)return ERROR *(S top-1)=e Status StackEmpty(SqStack S)I /栈空则返回TRUE,否则返回 FALSE if(S top==S base)return TRUE else return false int StackLength(SqStack S)f /返回栈中元素的个数 return(S top-S base) Status GetTop(SqStack S, Elem Type &e)f //用e带回栈顶元素的值 if(S top==S base)return ERROR (S top-1) return OK Status Print Elem(ElemType e)I //用于输出一个元素,根据元素类型的不同,此函数需适时改变 printf("%c", e->data) return OK Status StackTraverse(SqStack S, Status (*visit)(ElemType))( ∥/从栈底元素到栈顶元素依次执行 visIt函数,通常用于输出栈中元素 ElemType *p=S bas if(S.base==S.top) printf("空栈\n") hile(p<s. top)I(*visit)(*p): ++p: I return ok Status InOrderTraverse NonRecur_ I(BiTree T, Status (*visit)(Elem Type))I /本问题共两种求解思路,此为第一种 「何时递归:根结点不空时递归访问左子树(因还要回来访问根结点,故根结点入栈,左孩子成为新根结点) ∥/何时不递归:左子树空时栈顶根结点出栈访问,并将右孩子入栈 结束:当前访问结点为空且栈中无元素时遍历毕 Stack S: InitStack(S): BiTNode* p= hile(pl l! StackEmpty (s))( while(p)i Push(S, p) p=p->Child Pop(s, p) (*visit)(p) p=p->rchildif(S.top==S.base)return ERROR; e=*(S.top-1); --S.top; return OK; } Status SetTopElem(SqStack &S,ElemType e){ //将栈顶元素的值修改为e,书中未设此操作,可根据需要新设 if(S.top==S.base)return ERROR; *(S.top-1)=e; return OK; } Status StackEmpty(SqStack S){ //栈空则返回TRUE ,否则返回FALSE if(S.top==S.base)return TRUE; else return FALSE; } int StackLength(SqStack S){ //返回栈中元素的个数 return(S.top-S.base); } Status GetTop(SqStack S,ElemType &e){ //用e带回栈顶元素的值 if(S.top==S.base)return ERROR; e=*(S.top-1); return OK; } Status PrintElem(ElemType e){ //用于输出一个元素,根据元素类型的不同,此函数需适时改变 printf("%c",e->data); return OK; } Status StackTraverse(SqStack S,Status (*visit)(ElemType)){ //从栈底元素到栈顶元素依次执行visit函数,通常用于输出栈中元素 ElemType *p=S.base; if(S.base==S.top)printf("空栈\n"); else while(p<S.top){(*visit)(*p);++p;} return OK; } Status InOrderTraverse_NonRecur_1(BiTree T,Status (*visit)(ElemType)){ //本问题共两种求解思路,此为第一种 //何时递归:根结点不空时递归访问左子树(因还要回来访问根结点,故根结点入栈,左孩子成为新根结点) //何时不递归:左子树空时栈顶根结点出栈访问,并将右孩子入栈 //结束:当前访问结点为空且栈中无元素时遍历毕 SqStack S; InitStack(S); BiTNode* p=T; while(p||!StackEmpty(S)){ while(p){ Push(S,p); p=p->lchild; } Pop(S,p); (*visit)(p); p=p->rchild; } return OK; }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有