/*说明:该转化是采用顺序栈的先进后出原则进行的。其中,子函数包括1.顺序栈的初始化 2.入栈 3.出栈 4.取栈顶元素
主函数有自己想的函数,还有参照课本的函数*/
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
//1.初始化
int InitStack(SqStack *S)
{
S->base=(int *)malloc(sizeof(int)*MAXSIZE);
if(!S->base) return 0;//成功返回1,失败返回0
S->top=S->base;
S->stacksize=MAXSIZE;
return 1;
}
//2.入栈
int Push(SqStack *S,int e)
{
if(S->top-S->base==S->stacksize)
return 0;
*S->top++=e;
return 1;
}
//3.出栈
int Pop(SqStack *S,int *e)
{
if(S->top==S->base)
return 0;
S->top--;
*e=*S->top;
return 1;
}
//4.取栈顶元素
int GetTop(SqStack S)
{
if(S.base!=S.top)
return *(S.top-1);
}
//主函数完成十进制到二进制的转换
/*这是自己想的函数
int main()
{
SqStack S;
int a,b,n,*p;
InitStack(&S);
printf("Please enter a number(10):");
scanf("%d",&a);
while(a)
{
n=a%2;
a=a/2;
Push(&S,n);
}
for(p=S.top-1;p>=S.base;p--)
{
printf("%d",GetTop(S));
Pop(&S,&b);
}
return 0;
}
*/
//这是课本上的函数
int main()
{
int a,e;
SqStack S;
InitStack(&S);
printf("Please enter a number(10):");
scanf("%d",&a);
while(a)
{
Push(&S,a%2);
a=a/2;
}
while(S.top!=S.base)
{
Pop(&S,&e);
printf("%d",e);
}
return 0;
}