C语言实现栈数据结构并将十进制数转换为二进制

创作灵感:本篇博客将介绍如何使用C语言编写栈数据结构,并演示了如何将一个十进制数转换为二进制数,然后通过栈来实现反向输出二进制数。这个示例有助于初学者理解栈的基本操作和栈在数值转换中的应用。

技术笔记巩固知识要点:

  1. 栈的结构定义:程序使用C语言定义了一个栈结构(Stack),其中包含一个整数数组用于存储数据,以及一个指示栈顶位置的整数变量top。

  2. 创建空栈:createStack函数用于创建一个空栈,并返回指向栈的指针。

  3. 检查栈是否为空:isEmpty函数用于检查栈是否为空,如果栈顶指针top等于-1,则表示栈为空。

  4. 入栈操作:push函数用于将元素压入栈中。在入栈之前,需要检查栈是否已满,如果栈已满则会发生栈溢出。

  5. 弹出栈顶元素:pop函数用于弹出栈顶元素,并返回其值。在弹出之前,需要检查栈是否为空,如果栈为空则会发生错误。

在主函数中,程序演示了以下操作:

  • 用户输入一个十进制数字。
  • 将输入数字转换为二进制,并将二进制位逐个压入栈中。
  • 从栈中弹出二进制位并反向打印,得到对应的二进制表示。

这个示例展示了如何使用栈来解决数值转换问题,特别是将十进制数转换为二进制数,并实现了反向输出二进制数。这对初学者来说是一个有趣且实用的示例,有助于理解栈的应用场景。同时,本示例还涵盖了动态内存分配和释放,有助于读者更好地理解内存管理的概念。

#include <stdio.h>
#include <stdlib.h>

#define SIZE 50

// 栈结构定义
typedef struct Stack {
    int top;
    int arr[SIZE];
} Stack;

// 创建一个空栈
Stack* createStack() {
    Stack* stack = (Stack*)malloc(sizeof(Stack));
    stack->top = -1;
    return stack;
}

// 检查栈是否为空
int isEmpty(Stack* stack) {
    return stack->top == -1;
}

// 将元素压入栈
void push(Stack* stack, int item) {
    if (stack->top == SIZE - 1) {
        printf("栈溢出\n");
        return;
    }
    stack->arr[++stack->top] = item;
}

// 弹出栈顶元素
int pop(Stack* stack) {
    if (isEmpty(stack)) {
        printf("栈为空\n");
        exit(1);
    }
    return stack->arr[stack->top--];
}

// 下面是主函数
int main(void) {
    int num;
    Stack* stack = createStack();

    printf("请输入一个十进制数字:");
    scanf("%d", &num);

    // 将输入数值转换为二进制并压入栈
    while (num != 0) {
        push(stack, num % 2);
        num = num / 2;
    }

    // 从栈中弹出元素并打印
    printf("对应的二进制数为:");
    while (!isEmpty(stack)) {
        printf("%d", pop(stack));
    }
    printf("\n");

    free(stack);

    return 0;
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值