데이터 구조 작업 의 코드 - 스 택 의 순서 구현

작업 코드 1:
  • 수업 시간 에 준 순서 표 형식 으로 스 택 을 실현 하 는 프로그램 보충 (코드 가 이미 보 내 졌 습 니 다):
  • 키 보드 를 통 해 삽입 실현
  • 키 보드 를 통 해 삭제 실현
  • 좋 은 인간 과 컴퓨터 의 상호작용
  • 보 낸 코드:
    #include 
    #include 
    
    typedef int SElemType;
    typedef int Status;
    #define INIT_SIZE 100
    #define STACKINCREMENT 10
    #define Ok 1
    #define Error 0
    #define True 1
    #define False 0
    typedef struct
    {
        SElemType *base;
        SElemType *top;
        int stacksize;
    } SqStack;
    
    //    
    Status InitStack(SqStack *s)
    {
        s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType));
        if(!s->base)
        {
            puts("        !");
            return Error;
        }
        s->top = s->base;
        s->stacksize = INIT_SIZE;
        return Ok;
    }
    
    //   
    Status ClearStack(SqStack *s)
    {
        s->top = s->base;
        return Ok;
    }
    
    //     
    Status StackEmpty(SqStack *s)
    {
        if(s->top == s->base)
            return True;
        else
            return False;
    }
    
    //   
    Status Destroy(SqStack *s)
    {
        free(s->base);
        s->base = NULL;
        s->top = NULL;
        s->stacksize=0;
        return Ok;
    }
    
    //      
    Status GetTop(SqStack *s, SElemType &e)
    {
        if(s->top == s->base)
            return Error;
        e = *(s->top - 1);
        return Ok;
    }
    
    //  
    Status Push(SqStack *s, SElemType e)
    {
        if(s->top - s->base >= s->stacksize)//  
        {
            s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType));
            if(!s->base)
            {
                puts("        !");
                return Error;
            }
            s->top = s->base + s->stacksize;//      
            s->stacksize += STACKINCREMENT;//     
    
        }
        *s->top++ = e;
        return Ok;
    }
    
    //  
    Status Pop(SqStack *s, SElemType *e)
    {
        if(s->top == s->base)
            return Error;
        --s->top;
        *e = *(s->top);
        return Ok;
    }
    
    //   
    Status StackTraverse(SqStack *s,Status(*visit)(SElemType))
    {
        SElemType *b = s->base;//       base top  ,          
        SElemType *t = s->top;
        while(t > b)
            visit(*b++);
        printf("
    "
    ); return Ok; } Status visit(SElemType c) { printf("%d ",c); return Ok; } int main() { SqStack a; SqStack *s = &a; SElemType e; InitStack(s); int n; puts(" :"); scanf("%d", &n); while(n--) { int m; scanf("%d", &m); Push(s, m); } StackTraverse(s, visit); puts(""); puts("8 :"); Push(s, 8); StackTraverse(s, visit); puts(""); Pop(s, &e); printf(" :%d
    "
    , e); printf(" , , , %d
    "
    , *s->top);// Destroy(s); return 0; }
  • J17 - 4 - name - code - 제2차 - 창고. cpp
  • 옷 을 갈 아 입 힌 것 같 습 니 다. 함수 가 거의 변 하지 않 았 습 니 다. 내일 스 택 의 체인 이 필요 합 니 다.
    #include 
    #include 
    #include 
    using namespace std;
    typedef int SElemType;
    typedef int Status;
    #define INIT_SIZE 100
    #define STACKINCREMENT 10
    #define Ok 1
    #define Error 0
    #define True 1
    #define False 0
    typedef struct
    {
        SElemType *base;
        SElemType *top;
        int stacksize;
    } SqStack;
    
    //    
    Status InitStack(SqStack *s)
    {
        s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType));
        if(!s->base)
        {
            puts("        !");
            return Error;
        }
        s->top = s->base;
        s->stacksize = INIT_SIZE;
        return Ok;
    }
    
    //   
    Status ClearStack(SqStack *s)
    {
        s->top = s->base;
        return Ok;
    }
    
    //     
    Status StackEmpty(SqStack *s)
    {
        if(s->top == s->base)
            return True;
        else
            return False;
    }
    
    //   
    Status Destroy(SqStack *s)
    {
        free(s->base);
        s->base = NULL;
        s->top = NULL;
        s->stacksize=0;
        return Ok;
    }
    
    //      
    Status GetTop(SqStack *s, SElemType &e)
    {
        if(s->top == s->base)
            return Error;
        e = *(s->top - 1);
        return Ok;
    }
    
    //  
    Status Push(SqStack *s, SElemType e)
    {
        if(s->top - s->base >= s->stacksize)//  
        {
            s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType));
            if(!s->base)
            {
                puts("        !");
                return Error;
            }
            s->top = s->base + s->stacksize;//      
            s->stacksize += STACKINCREMENT;//     
    
        }
        *s->top++ = e;
        return Ok;
    }
    
    //  
    Status Pop(SqStack *s, SElemType *e)
    {
        if(s->top == s->base)
            return Error;
        --s->top;
        *e = *(s->top);
        return Ok;
    }
    
    //   
    Status StackTraverse(SqStack *s,Status(*visit)(SElemType))
    {
        SElemType *b = s->base;//       base top  ,          
        SElemType *t = s->top -1;
        while(t >= b)
            visit(*t--);
    //        visit(*b++);
        printf("
    "
    ); return Ok; } Status visit(SElemType c) { printf("%d ",c); return Ok; } void menu() { cout<<" menu:"<<endl; cout<<"1. "<<endl; cout<<"2. "<<endl; cout<<"3. "<<endl; cout<<"4.menu"<<endl; cout<<"0. "<<endl; } void preface() { printf(" *********************************************
    "
    " * *
    "
    " * : *
    "
    " * *
    "
    " * *
    "
    " *********************************************
    "
    "

    "
    ); } int main() { SqStack a; SqStack *s = &a; SElemType e; InitStack(s); preface(); menu(); int choose; int x; while(true) { cout<<"
    :"
    ; cin>>choose; int k=0; switch(choose) { case 1: printf(" :"); cin>>x; printf(" %d :",x); while(x--) { cin>>e; Push(s,e); } // printf(" !
    ");
    break; case 2: Pop(s,&e); printf(" :%d
    "
    , e); break; case 3: StackTraverse(s, visit); printf(" !
    "
    ); break; case 4: menu(); break; case 0: k=1; break; default: printf(" !"); break; } if(k) break; } Destroy(s); return 0; }

    좋은 웹페이지 즐겨찾기