//此代码只实现十进制转换为二进制
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef struct {
SElemType *base; //在栈构造之前和销毁之后,base的值为NULL
SElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
Status InitStack(SqStack &S) //构造空栈
{
S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base) exit(OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S, SElemType e)//压栈(插入新元素为栈顶元素)
{
if(S.top - S.base >= S.stacksize)
{//栈满,追加存储空间
S.base = (SElemType *) realloc (S.base,
(S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!S.base) exit (OVERFLOW); //存储分配失败
S.top = S.base + S.stacksize;
S.stacksize = STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
Status Pop(SqStack &S,SElemType e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if(S.top = S.base) return ERROR;
e = *--S.top;
return OK;
}
Status StackEmpty(SqStack S)//判断是否为空栈
{
if(S.top == S.base)
return TRUE;
else
return FALSE;
}
Status StackTraverse(SqStack S)//打印函数
{
if (S.base == NULL)
return ERROR;
if (S.top == S.base)
printf("栈中没有元素……\n");
SElemType *p;
p = S.top;
while (p > S.base)
{
p--;
printf("%d ", *p);
}
return OK;
}
void conversion()//二进制转换函数
{
SqStack S;
int n;
InitStack(S);
SElemType e;
scanf("%d",&n);
while(n!=0)
{
Push(S, n%2);//元素入栈
n = n / 2;
}
StackTraverse(S);
}
int main()
{
SqStack S;
SElemType e;
int n;
conversion();
return 0;
}