【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;
}

 输出结果如下:

 

相关推荐

  1. C语言十进制十六进制

    2024-07-22 20:06:01       27 阅读
  2. C语言:htoi十六进制十进制

    2024-07-22 20:06:01       38 阅读
  3. C语言内存管理以及空间空间区别

    2024-07-22 20:06:01       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 20:06:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 20:06:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 20:06:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 20:06:01       55 阅读

热门阅读

  1. Redis哨兵模式实践

    2024-07-22 20:06:01       15 阅读
  2. MLlib机器学习入门:用Spark打造预测模型

    2024-07-22 20:06:01       19 阅读
  3. python绘制函数调用图总结

    2024-07-22 20:06:01       16 阅读
  4. PHP 表单验证:邮件和URL

    2024-07-22 20:06:01       17 阅读
  5. org.apache.ibatis.session是什么?

    2024-07-22 20:06:01       13 阅读
  6. C语言 指针方法 有一个班4个学生,5门课程

    2024-07-22 20:06:01       13 阅读
  7. C++中的explicit关键字

    2024-07-22 20:06:01       13 阅读
  8. 数组常见的实例方法

    2024-07-22 20:06:01       15 阅读
  9. 精通Gradle发布配置:打造自动化部署的高速公路

    2024-07-22 20:06:01       16 阅读
  10. 力扣283.移动零

    2024-07-22 20:06:01       15 阅读
  11. SAP 如何修改统驭科目类型

    2024-07-22 20:06:01       15 阅读