利用栈结构,编写程序将十进制数转换成二进制数。
提示:十进制数值转换成二进制使用辗转相除法将一个十进制数值转换成二进制数值。即用该十进制数值除以2,并保留其余数;
重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的二进制数值。转换算法要求用一个函数完成。
提示:十进制数值转换成二进制使用辗转相除法将一个十进制数值转换成二进制数值。即用该十进制数值除以2,并保留其余数;
重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的二进制数值。转换算法要求用一个函数完成。
顺序栈的基本操作的代码可参考如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxStackSize 1000
typedef struct
{
int stack[MaxStackSize];
int top;
}SeqStack;
void StackInitiate(SeqStack *S) /*初始化顺序堆栈S*/
{ S->top = 0; /*定义初始栈顶下标值*/
}
int StackNotEmpty(SeqStack S)
/*判顺序堆栈S非空否,非空则返回1,否则返回0*/
{
if(S.top <= 0) return 0;
else return 1;
}
int StackPush(SeqStack *S, int *x)
/*把数据元素值x压入顺序堆栈S,入栈成功则返回1,否则返回0 */
{
if(S->top >= MaxStackSize)
{
printf("堆栈已满无法插入! \n");
return 0;
}
else
{
S->stack[S->top] = *x;
S->top ++;
return 1;
}
}
int StackPop(SeqStack *S, int *d)
/*弹出顺序堆栈S的栈顶数据元素值到参数d ,出栈成功则返回1,否则返回0*/
{ if(S->top <= 0)
{
//printf("堆栈已空无数据元素出栈! \n");
return 0;
}
else
{
S->top --;
*d = S->stack[S->top];
return 1;
}
}
int StackTop(SeqStack *S, int *d)
/*取顺序堆栈S的当前栈顶数据元素值到参数d ,成功则返回1,否则返回0*/
{
if(S->top <= 0)
{
printf("堆栈已空! \n");
return 0;
}
else
{
*d = S->stack[S->top - 1];
return 1;
}
}
//提示:十进制数值转换成二进制使用辗转相除法将一个十进制数值转换成二进制数值。即用该十进制数值除以2,并保留其余数;
//重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的二进制数值
void f(int s)//输入十进制数为s
{
SeqStack *S = (SeqStack *)malloc(sizeof(SeqStack));
//由于之前定义函数的时候使用了返回0/1的操作,所以需要用一个i来存这个元素,事实上,如果上面函数如果选择void可以不用这个没用的一步
//t、q是接下来的两个需要用的参数
int t,i,q;
//入栈
while(s!=0)
{
t=s%2;
s=s/2;
i = StackPush( S, &t);
if(i==0) return;
}
//出栈输出
while(S)
{
if(!StackPop( S,&q)) return ;
printf("%d",q);
}
}
void main()
{
SeqStack *myS = (SeqStack *)malloc(sizeof(SeqStack));
StackInitiate(myS);
f(555);
}