利用栈实现进制之间的转换

在这个例子中我用的是十进制转换成二进制

代码如下

#include
#include
#define  STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
    int *base;
    int *top;
    int stacksize;
}SqStack;

#实现一个空栈的定义
int InitStack(SqStack &S){
    S.base=(int*)malloc(STACK_INIT_SIZE * sizeof(int));
    if(!S.base) return -1;
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return 0;
}

#入栈操作 e是要传入栈的数据
int Push(SqStack &S,int e){    

if(S.top - S.base >= S.stacksize){#这里是判断栈是不是满了如果满了追加空间 
     S.base=(int *)realloc(S.base,S.stacksize+STACKINCREMENT*sizeof(int));
      if(!S.base) return -1;
      S.top=S.base+S.stacksize;
      S.stacksize += STACKINCREMENT;
      }
     *S.top ++ = e;
     return 0;

#判断这个栈是不是为空 只要栈底和栈顶指向同一块空间即可 

int StackEmpty(SqStack S){
    if(S.base==S.top) return 1;
    else
        return 0;
}

#弹出栈顶的元素 

int Pop(SqStack &S,int &e){
    if(S.top==S.base) return 0; #如果栈为空直接返回
    e= *--S.top; #元素弹出并且栈顶向下移动
    return 1;
}
int main()
{
    SqStack S;
    int N,e;
    InitStack(S);
    printf("请输入一个十进制数字:\n");
    scanf("%d",&N);
   #while循环里面是十进制转换成二进制数学逻辑  如果要进行其他进制转化使用其他逻辑即可

    while(N){
        Push(S,N % 2);
        N=N/2; 
    }
    printf("对应的二进制数字为:\n");
    while(!StackEmpty(S)){
        Pop(S,e);
        printf("%d",e);
    }
}

你可能感兴趣的:(数据结构,c++,c语言)