定义一个函数,将其转换为二进制数,将所有二进制位存储到栈内,之后再出栈打印输出

seqstack.h 

#ifndef  _SEQSTACK_H_
#define _SEQSTACK_H_
#include <stdio.h>
#include <stdlib.h>
typedef struct seqstack
{
    int *data;
    int maxlen;
    int top;
} seqstack_t;

//创建空顺序栈
seqstack_t *createEmptySeqStack(int len);
//判断是否为满,满返回1  未满返回0
int IsFull(seqstack_t *p);
//入栈,data代表入栈的数据
int pushSeqStack(seqstack_t *p, int data);
//判断栈是否为空
int isEmptySeqStack(seqstack_t *p);
//出栈
int popSeqStack(seqstack_t *p);
#endif

seqstack.c 

#include "seqstack.h"
//创空
seqstack_t *createEmptySeqStack(int len)
{
    seqstack_t *p = (seqstack_t *)malloc(sizeof(seqstack_t));
    if (NULL == p)
    {
        perror("p malloc err");
        return NULL;
    }
    p->top = -1;
    p->maxlen = len;
    p->data = (int *)malloc(sizeof(int) * len);
    if (NULL == p->data)
    {
        perror("p->data malloc err");
        return NULL;
    }
    return p;
}
//判满
int IsFUll(seqstack_t *p)
{
    return p->top + 1 == p->maxlen;
}
//入栈
int pushSeqStack(seqstack_t *p, int data)
{
    if (IsFUll(p))
    {
        printf("pushStack err\n");
        return -1;
    }
    p->top++;
    p->data[p->top] = data;
    return 0;
}

//判断栈是否为空
int isEmptySeqStack(seqstack_t *p)
{
    return p->top == -1;
}
//出栈
int popSeqStack(seqstack_t *p)
{
    //容错判断
    if (isEmptySeqStack(p))
    {
        printf("popSeqStack err\n");
        return -1;
    }
    p->top--;
    return p->data[p->top + 1];
}

main.c 

#include "seqstack.h"

void convert(int num,seqstack_t *p)
{
    //入栈
    while (num > 0)
    {
        int n = num % 2;
        pushSeqStack(p,n);
        num = num / 2;
    }
    //出栈
    while (!isEmptySeqStack(p))
    {
        printf("%d ",popSeqStack(p));
    }
    putchar(10);
}
int main(int argc, char const *argv[])
{
    seqstack_t *p = createEmptySeqStack(8);
    int num;
    printf("输入一个十进制数:");
    scanf("%d",&num);
    convert(num,p);
    return 0;
}

makefile

CC=gcc
GFLAGS=-c -g -Wall
OBJS=seqstack.o main.o

seqstack:$(OBJS)
	$(CC) $^ -o $@
%.o:%.c
	$(CC) $(GFLAGS) $< -o $@
.PHONY:clean
clean:
	$(RM) seqstack *.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-Turbo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值