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

//十进制转二进制
#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;
}

猜你喜欢

转载自blog.csdn.net/ling_wang/article/details/80006923