用顺序栈实现十进制转二进制

//十进制转二进制
#include<bits/stdc++.h>
using namespace std;

#define maxsize 1000

struct Stack{
    int *base;      //栈底指针
    int *top;       //栈顶指针
    int stacksize;  //栈可用的最大容量
};

bool initstack(Stack &s){//构建空战
    s.base = new int[maxsize];      //为顺序栈分配一个最大容量为maxsize的数组空间
    if(!s.base)     exit(-1);       //存储分配失败
    s.top = s.base;                 //top初始为base, 空栈
    s.stacksize = maxsize;          //stacksize置为栈的最大容量maxsize
    return 1;
}

bool push(Stack &s, int e){
    //插入元素e为新的栈顶指针
    if(s.top - s.base >= s.stacksize){//栈满
        s.base = (int *)realloc(s.base, (s.stacksize + maxsize) * sizeof(int));
        if(!s.base) return 0;
            s.top = s.base + s.stacksize;
            s.stacksize += maxsize;
    }
    *s.top++ = e;
    return 1;
}

int pop(Stack &s, int &e){
    //返回栈顶元素, 不修改栈顶指针
    if(s.top != s.base)
        e = *--s.top;
    else return -1;
}

bool stackempty(Stack &s){
    if(s.top == s.base)
        return 0;
    return 1;
}

int main(){
    int a, e;
    Stack s;
    initstack(s);
    scanf("%d", &a);
    while(a){
        push(s, a%2);
        a = a/2;
    }
//    e = pop(s);
//        cout << e;
    while(stackempty(s)){
        pop(s, e);
        cout << e;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值