数据结构之栈与队列:栈实现进制转换(C & Python)

问题描述

利用栈的数据结构实现将十进制数转换成二进制数

C语言实现

顺序表的存储结构实现栈

代码:

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

#define STACK_INIT_SIZE 100   //栈初始开辟空间大小
#define STACK_INCREMENT 10    //栈追加空间大小

//栈的结构体
typedef struct stack{
    int *base;
    int *top;
    int size;
}binStack;

//栈初始化
binStack stack_init()
{
    binStack bs;
    bs.base = (int *)malloc(sizeof(int)*STACK_INIT_SIZE);
    bs.top = bs.base;
    bs.size = STACK_INIT_SIZE;
    return bs;
}

//入栈
void push(binStack *bs, int e)
{
    if(bs->top - bs->base >= bs->size)
    {
        bs->size += STACK_INCREMENT;
        bs->base = realloc(bs->base, bs->size);
    }
    *(bs->top++) = e;
}

//出栈
int pop(binStack *bs)
{
    if(bs->top != bs->base)
    {
        bs->top--;
        return *bs->top;
    }
    return -1;
}

//主函数
void main()
{
    int dec;
    binStack bs = stack_init();
    printf("请输入十进制整数:\n");
    scanf("%d", &dec);
    while(dec)
    {
        push(&bs, dec%2);
        dec /= 2;
    }
    printf("转换后的二进制数是:\n");
    while(bs.top != bs.base)
    {
        printf("%d", pop(&bs));
    }
    printf("\n\n");
    system("date /T");
    system("TIME /T");
    system("pause");
    exit(0);    
}

运行结果:

Python实现

对于stack我们可以使用python内置的list实现(也可以用链表实现),因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。

代码:

import datetime  //显示时间引入的库
import time      //
from pip._vendor.distlib.compat import raw_input  //使命令窗口不立即关闭引入的库

//栈类
class BinStack:
    def __init__(self):
        self.bs = []
    
    //入栈
    def push(self, e):
        self.bs.append(e)
    
    //出栈     
    def pop(self):
        if self.bs:
            return self.bs.pop()
        else:
            raise LookupError("stack is empty!")
    
    //检查栈是否为空,是返回False,不是返回True
    def isEmpty(self):
        return bool(self.bs)
        
if __name__ == '__main__':
    binStack = BinStack()
    dec = int(input("请输入十进制整数:\n"))
    print("转换后的二进制数是:")
    while dec != 0:
        binStack.push(dec%2)
        dec //= 2
    while binStack.isEmpty() == True:
        print("{}".format(binStack.pop()), end="")
    else:
        print("\n")
    //打印时间
    datetime = datetime.datetime.now()
    print(datetime.strftime("%Y-%m-%d\n%H:%M:%S"))
    //使命令窗口不立即关闭
    input("Press Enter to exit…")

 

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

观察者555

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

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

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

打赏作者

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

抵扣说明:

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

余额充值