栈边进制数据结构的问题

  1. 简答题
    将如下代码中10进制转换为2进制的代码函数conversion补充完整:

#include "stdio.h"
#include "stdlib.h"

/顺序栈的实现/
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 200//顺序栈存储空间的初始分配量
typedef int Status;
typedef int SElemType;

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

//算法3.1 顺序栈的初始化
Status InitStack(SqStack *S)
{
//构造一个空栈S

S->base = (SElemType *)malloc(sizeof(SElemType)*MAXSIZE);//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间

S->top = S->base; //top初始为base,空栈
S->stacksize = MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
return OK;

}

int StackEmpty(SqStack *S){
return S->top==S->base;
}

//算法3.2 顺序栈的入栈
Status Push(SqStack *S, SElemType e)
{
// 插入元素e为新的栈顶元素
if (S->top - S->base == S->stacksize)
return ERROR; //栈满
*((S->top)++) = e; //元素e压入栈顶,栈顶指针加1
return OK;
}
//算法3.3 顺序栈的出栈
Status Pop(SqStack *S, SElemType *e)
{
//删除S的栈顶元素,用e返回其值
if (S->base == S->top)
return ERROR;//栈空

// printf("%X,%d \n",S->top,*(S->top));
*e = *(--(S->top)); //栈顶指针减1,将栈顶元素赋给e
return OK;
}
//算法3.4 取顺序栈的栈顶元素
SElemType GetTop(SqStack *S) //返回S的栈顶元素,不修改栈顶指针
{
if (S->top != S->base) //栈非空
return *(S->top - 1); //返回栈顶元素的值,栈顶指针不变
}

//算法3.20 数制的转换(顺序栈实现)
void conversion(SqStack *S,int N) {//对于任意一个非负十进制数,打印输出与其等值的2进制数
int e;

while (N) //当N非零时,循环
{
(1) //把N与2求余得到的2进制数压入栈S
(2)//N更新为N与2的商
}
while (3) //当栈S非空时,循环
{
(4) //弹出栈顶元素e
printf("%d",e); //输出e
}
}