自学内容网 自学内容网

【C语言】 利用栈完成十进制转二进制(分文件编译,堆区申请空间malloc)

        利用栈先进后出的特性,在函数内部,进行除二取余的操作,把每次的余数存入栈内,最后输出刚好就是逆序输出,为二进制数

        学习过程中,对存储栈进行堆区的内存申请时候,并不是很熟练,一开始还在想去接收的类型应该是什么,后面发现直接用S->data去进行接收即可,本身就是datytype *类型

1、使用栈,完成进制转换

输入:一个整数,进制数

输出:该数的对应的进制数

//zhuanhuan.h
#ifndef ZHUANHUAN_H
#define ZHUANHUAN_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef int datatype;
#define MAX 10

typedef struct Stack
{
    datatype *data;
    int top;
}Stack,*StackPtr;

//创建栈
StackPtr stack_create();

//判空
int stack_empty(StackPtr S);

//判满
int stack_full(StackPtr S);

//进制转换
void stack_zhuanhuan(StackPtr S,datatype e);

//遍历栈
void stack_show(StackPtr S);


#endif
//zhuanhuan.c
#include"zhuanhuan.h"

//创建栈
StackPtr stack_create()
{
    StackPtr S = (StackPtr)malloc(sizeof(Stack));
    if(NULL == S)
    {
        printf("创建失败\n");
        return NULL;
    }

    //为储存栈申请空间
    S->data = (datatype *)malloc(sizeof(S->data)*MAX);
    if(NULL == S->data)
    {
        printf("创建失败\n");
        return NULL;
    }
    memset(S->data,0,sizeof(S->data)*MAX);
    S->top = -1;
    printf("创建成功\n");
    return S;
}


//判空
int stack_empty(StackPtr S)
{
    return S->top == -1;
}


//进制转换
void stack_zhuanhuan(StackPtr S,datatype e)
{
    if(NULL == S)
    {
        printf("转换失败\n");
        return;
    }
    while(e)       //当e为0的时候退出循环
    {
        S->top += 1;    //每次存入时,top的指向都要先递增1后再去往里面去存内容
        S->data[S->top] = e % 2;
        e /= 2;
    }
}



//遍历栈
void stack_show(StackPtr S)
{
    if(NULL == S || stack_empty(S))
    {
        printf("遍历失败\n");
        return;
    }

    printf("该数的二进制数是:");
    for(int i = S->top;i >= 0;i--)
    {
        printf("%d",S->data[i]);
    }
    printf("\n");
}
//main.c
#include"zhuanhuan.h"
 

int main(int argc, char const *argv[])
{
    int n = 0;

    //创建一个栈
    StackPtr S = stack_create();

    printf("请输入一个你需要转换的十进制数:");
    scanf("%d",&n);
    getchar();

    //在函数内部循环吧余数依次放入栈内
    stack_zhuanhuan(S,n);

    //栈会逆序输出,故刚好为二进制数
    stack_show(S);
    return 0;
}

 输出结果如下:


原文地址:https://blog.csdn.net/2301_77133426/article/details/140617265

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!