void PostOrderNonRecursive(struct BinaryTreeNode *root){ TreeStack *S = CreateStack(10); while(1) { //自分をスタックにpushして左に行けるところまで行く。 if(root) { Push(S, root); root = root->left; } else { if(IsEmptyStack(S)) { printf("Stack is Empty\n"); return; } //右にも行けなくなったらpopして1つ前のノードを取り出す(1つ戻る) else if(Top(S)->right == NULL) { root = Pop(S); printf("%d", root->data); // } while(root == Top(S)->right) { printf("%d", Top(S)->data); root = Pop(S); } if(!IsEmptyStack(S)){ root = Top(S)->right; }else{ root = NULL; } } } DeleteStack(S); }
void InorderTraversalWithoutRecursion(struct TNode* root){ if(!root){ return; } SNode* stack=NULL; while(1){ while(root){ Push(&stack,root); //printf("\n\n%d\n\n",root->data); root=root->left; } if(IsEmptyStack(stack)){ break; }else{ root=Pop(&stack); printf("%d ",root->data); root=root->right; } } }
/* START: fig3_52.txt */ void Pop( Stack S ) { if( IsEmptyStack( S ) ) Error( "Empty stack" ); else S->TopOfStack--; }
/* START: fig3_51.txt */ ElementType Top( Stack S ) { if( !IsEmptyStack( S ) ) return S->Array[ S->TopOfStack ]; Error( "Empty stack" ); return 0; /* Return value used to avoid warning */ }
BinaryTreeNode *Top(BinaryTreeNodeStack *S){ if(IsEmptyStack(S)){ printf("Stack is Empty\n"); return NULL; } else { struct BinaryTreeNode *rtndata = S -> array[S->top]; return rtndata; } }
BinaryTreeNode *Pop(BinaryTreeNodeStack *S) { if(IsEmptyStack(S)) { printf("Stack is Empty\n"); return 0; }else{ BinaryTreeNode *rtndata = S -> array[S -> top--]; return rtndata; } }
struct TNode* Pop(SNode** stack){ if(!IsEmptyStack(*stack)){ SNode* tmpNode=(*stack); struct TNode* tmpData=tmpNode->data; (*stack)=(*stack)->next; free(tmpNode); return tmpData; } }
struct BinaryTreeNode *Pop(TreeStack *S) { if(IsEmptyStack(S)) { printf("Stack is Empty\n"); return 0; }else{ struct BinaryTreeNode *rtndata = S -> array[S -> top--]; //printf("<POP>\n"); //DebugS(S); return rtndata; } }
//************************************************************** double PopStack ( MyStack* Stack ) { if ( IsEmptyStack ( Stack ) == -1 ) return -1; ( Stack->Head )--; if ( IsStackValid ( Stack ) == -1 ) return -1; errno = 0; return Stack->Data[( Stack->Head ) + 1]; }
void PostOrderUsingTwoStack(struct TNode* root){ SNode* stack1=NULL; SNode* stack2=NULL; while(1){ while(root){ Push(&stack2,root); //printf("%d ",root->data); Push(&stack1,root); root=root->right; } if(IsEmptyStack(stack1)){ break; } root=Pop(&stack1); root=root->left; } //printing stack2 while(!IsEmptyStack(stack2)){ printf("%d ",Pop(&stack2)->data); } }
//흐름 처리 bool CGameProcessManager::Process() { //처리할 스택이 없으면 리턴 if(IsEmptyStack()) { return false; } //프로세스 처리 CProcessManager::Process(); //현 프로세스 처리 if(GetCurrentProcess()) { GetCurrentProcess()->Control(); //입력 처리 GetCurrentProcess()->Process(); //프로세스 처리 GetCurrentProcess()->Render(); //출력 처리 } return true; }