10 진법 과 임 의 진법 전환 (10 이내) - 데이터 구조 작업 실현

작업 코드 3
  • 10 진 변환 바 이 너 리 (코드 이미 드 렸 습 니 다. 자세 한 내용 은 "PPT - Jk 17 데이터 구조 2 차 탑승 임무 - 실험 3 - 2018 년 9 월 26 일" 참조)
  • 10 진법 과 임 의 진법 의 전환 (10 이내)
  • 실현
  • 순서 표 와 링크 두 가지 데이터 구조 로 상기 두 가지 기능
  • 을 실현 한다.
    1. 순서 스 택 은 10 진 전환 2 진 을 실현 합 니 다.
    #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; } int main() { SqStack a; SqStack *s = &a; SElemType e,n; InitStack(s); printf(" :"); cin>>n; printf("
    %d :"
    ,n); InitStack(s); while(n) { e = n%2; Push(s,e); n/=2; } StackTraverse(s,visit); puts(""); Destroy(s); return 0; }

    2. 체인 스 택 은 10 진법 전환 2 진법 을 실현 한다.
    
    #include
    #define ElemType  int
    #define SElemType int
    #define Status    int
    #define ERROR     0
    #define OK        1
    
    using namespace std;
    
    typedef struct StackNode{//      
            ElemType data;
            struct StackNode *next;
    }StackNode,*LinkStack;
    
    LinkStack S,p;
    
    Status InitStack(LinkStack &S)//    
    {
            S=NULL;
            return OK;
    }
    
    Status Push(LinkStack &S,SElemType &e)//       e
    {
            p = new StackNode;      //     
            p->data = e;            //         e
            p->next = S;            //        
            S = p;                  //       p;
            return OK;
    }
    
    Status Pop(LinkStack &S,SElemType &e)//      , e    
    {
            if(S == NULL)     return ERROR; //  
            e = S->data;                    //       e
            p = S;                          // p          ,    
            S = S->next;                    //      
            delete p;                       //         
            return OK;                      //
    }
    
    Status GetTop(LinkStack S)
    {
            if(S != NULL)
                    return S->data;
    }
    
    void display(struct StackNode* head)//   
    {
        struct StackNode *current;
        current = head;
        if(current!= NULL)
        {
            printf("Stack: ");
            do
            {
                printf("%d ",current->data);
                current = current->next;
            }
            while (current!= NULL);
            printf("
    "
    ); } else { printf("The Stack is empty!
    "
    ); } } int empty(struct StackNode* head) { return head == NULL ? 1 : 0; } int main() { int n,e,x; printf(" :"); cin>>n; printf("
    %d :"
    ,n); InitStack(S); while(n) { e = n%2; Push(S,e); n/=2; } while(!empty(S)) { Pop(S,e); printf("%d",e); } puts(""); return 0; }

    3. 순서 스 택 은 10 진법 전환 임 의 진법 (10 이내) 을 실현 합 니 다.
    #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; } int main() { printf( " *******************************************
    "
    \ " * *
    "
    \ " * n x *
    "
    \ " * n x *
    "
    \ " * *
    "
    \ " *******************************************
    "
    \ ); SqStack a; SqStack *s = &a; SElemType e,n; InitStack(s); printf(" :"); int m; cin>>n; printf(" (2-9):"); cin>>m; printf("%d %d :",n,m); InitStack(s); while(n) { e = n%m; Push(s,e); n/=m; } StackTraverse(s,visit); puts(""); Destroy(s); return 0; }

    4. 체인 스 택 은 10 진법 전환 임 의 진법 (10 이내) 을 실현 한다.
    #include
    #define ElemType  int
    #define SElemType int
    #define Status    int
    #define ERROR     0
    #define OK        1
    
    using namespace std;
    
    typedef struct StackNode{//      
            ElemType data;
            struct StackNode *next;
    }StackNode,*LinkStack;
    
    LinkStack S,p;
    
    Status InitStack(LinkStack &S)//    
    {
            S=NULL;
            return OK;
    }
    
    Status Push(LinkStack &S,SElemType &e)//       e
    {
            p = new StackNode;      //     
            p->data = e;            //         e
            p->next = S;            //        
            S = p;                  //       p;
            return OK;
    }
    
    Status Pop(LinkStack &S,SElemType &e)//      , e    
    {
            if(S == NULL)     return ERROR; //  
            e = S->data;                    //       e
            p = S;                          // p          ,    
            S = S->next;                    //      
            delete p;                       //         
            return OK;                      //
    }
    
    Status GetTop(LinkStack S)
    {
            if(S != NULL)
                    return S->data;
    }
    
    void display(struct StackNode* head)//   
    {
        struct StackNode *current;
        current = head;
        if(current!= NULL)
        {
            printf("Stack: ");
            do
            {
                printf("%d ",current->data);
                current = current->next;
            }
            while (current!= NULL);
            printf("
    "
    ); } else { printf("The Stack is empty!
    "
    ); } } int empty(struct StackNode* head) { return head == NULL ? 1 : 0; } int main() { printf( " *******************************************
    "
    \ " * *
    "
    \ " * n x *
    "
    \ " * n x *
    "
    \ " * *
    "
    \ " *******************************************
    "
    \ ); int n,e,x; printf(" :"); int m; cin>>n; printf(" (2-9):"); cin>>m; printf("%d %d :",n,m); InitStack(S); while(n) { e = n%m; Push(S,e); n/=m; } while(!empty(S)) { Pop(S,e); printf("%d",e); } puts(""); return 0; }

    좋은 웹페이지 즐겨찾기