C言語はスタックの思想で十進法のバイナリを実現する


#include 
#include 

typedef int DataType;
typedef struct stacknode
{
     
    DataType data;
    struct stacknode *next;
} LinkStack;

LinkStack *InitStack()
{
     
    LinkStack *S;
    S = NULL;
    return S;
}

int EmptyStack(LinkStack *S)
{
     
    if (S == NULL)
        return 1;
    else
        return 0;
}

LinkStack *Pop(LinkStack *S, DataType *x)
{
     
    LinkStack *p;
    if (EmptyStack(S))
    {
     
        printf("\t   ,    !");
        return NULL;
    }
    else
    {
     
        *x = S->data;
        p = S;
        S = S->next;
        free(p);
        return S;
    }
}

LinkStack *Push(LinkStack *S, DataType x)
{
     
    LinkStack *p;
    p = (LinkStack *)malloc(sizeof(LinkStack));
    p->data = x;
    p->next = S;
    S = p;
    return S;
}

int GetTop(LinkStack *S, DataType *x)
{
     
    if (EmptyStack(S))
    {
     
        printf("\t   !");
        return 0;
    }
    else
    {
     
        *x = S->data;
        return 1;
    }
}

void ShowStack(LinkStack *S)
{
     
    LinkStack *p = S;
    if (EmptyStack(S))
    {
     
        printf("\t   !");
    }
    else
    {
     
        printf("            :");
        while (p != NULL)
        {
     
            printf("%2d", p->data);
            p = p->next;
        }
    }
}

void D_B(LinkStack *S, DataType x)
{
     
    while (x)
    {
     
        S = Push(S, x % 2);
        x /= 2;
    }
    printf("        :");
    while (!EmptyStack(S))
    {
     
        S = Pop(S, &x);
        printf("%d", x);
    }
}

int main()
{
     
    int x;
    LinkStack *Stack;
    Stack = InitStack(Stack);
    // Stack = Push(Stack, 1);
    // Stack = Push(Stack, 2);
    // Stack = Push(Stack, 3);
    // Stack = Pop(Stack, &x);
    // ShowStack(Stack);
    // GetTop(Stack, &x);
    // printf("

%d", x);
// D_B(Stack, 23); return 0; }