在写代码之前,我们首先要了解关于顺序栈的实现和十进制转化为二进制的实现。对于第一个关于顺序栈的实现,我在之前的博客里有详细的介绍,顺序栈的实现 ( http://t.csdnimg.cn/cWJXn),在这里就不过多的介绍。对于十进制转二进制,它可以采用除2取余法,首先不断将十进制除以2,每次记录余数,直到商数为0为止,然后将得到的所有余数全部排列起来,再将它反过来(逆序排列)。
typedef struct /*定义顺序栈*/
{
int data[Maxsize];
int Top;
} stack;
void Initstack( stack *s ) /*栈的初始化*/
{
s->Top=0;
}
int push(stack *s,int x) /*入栈*/
{
if(s->Top!=Maxsize-1)
{
s->Top++;
(s->data)[s->Top]=x;
return 1;
}
else
{return 0;}
}
int pop(stack *s) /*出栈*/
{
int x;
if(s->Top!=0)
{
x=(s->data)[s->Top];
s->Top--;
return x;
}
else
{return -1;}
}
下面分段解释这段代码的功能:
1. 声明一个栈结构变量 s ,并分配栈的内存空间。
2. 调用 Initstack() 函数初始化栈。
3. 使用一个 do-while 循环,将输入的整数 x 逐次除以 2,取余数,并将余数压入栈中。
4. 初始化两个变量 y 和 z ,用于存储最终的十进制结果。
5. 使用一个 do-while 循环,将栈中的元素逐次弹出,并乘以 10 后与 y 相加,同时将弹出的元素存储在 z 中。
6. 循环结束后,返回最终的十进制结果 y 。
总体来说,这段代码通过将输入的整数逐次除以 2 并取余数的方式,将二进制数逐位存储在栈中,然后再逐位将二进制数转换为十进制数并返回。
int transform(int x) /*实现转换*/
{
stack *s=(stack *)malloc(sizeof(stack));
Initstack( s );
int y,z;
do
{
y=x%2;
x=x/2;
push(s,y);
}while(x!=0);
z=0;
y=0;
do
{
y=10*y+z;
z=pop(s);
}while(z!=-1);
return y;
}
int main()
{
int x,y;
printf("请输入一个十进制数:");scanf("%d",&x);
printf("\n");
y=transform(x);
printf("此十进制数转换成的二进制数为:%d\n",y);
}
下面这段代码定义了一个名为 transform 的函数,它使用一个栈 stack *s 来实现一个整数到另一个整数的转换。以下是对代码的逐行解释:
1. int y, z; :声明两个整数变量 y 和 z ,用于临时存储运算结果。
2. do :开始一个 do-while 循环,只要条件 x != 0 成立,就会执行循环体中的代码。
3. y = x % 2; :计算 x 除以 2 的余数,并将结果赋值给变量 y 。
4. x = x / 2; :将 x 除以 2,即右移一位,实现整数的二进制位逐次除以 2。
5. push(s, y); :将当前的 y 值入栈。
6. while (x != 0); :循环继续,直到 x 变为 0。
7. z = 0; :初始化变量 z 为 0。
8. y = 0; :初始化变量 y 为 0。
9. do :开始另一个 do-while 循环,只要条件 z != -1 成立,就会执行循环体中的代码。
10. y = 10 * y + z; :计算 y 的值,将之前入栈的数字逐次乘以 10 并加上当前的 z 值。
11. z = pop(s); :从栈中弹出一个数字,并将其赋值给变量 z 。
12. while (z != -1); :循环继续,直到栈为空或 z 变为 -1。
13. return y; :返回最终计算得到的 y 值,作为转换的结果。
int transform(stack *s,int x) /*实现转换*/
{
int y,z;
do
{
y=x%2;
x=x/2;
push(s,y);
}while(x!=0);
z=0;
y=0;
do
{
y=10*y+z;
z=pop(s);
}while(z!=-1);
return y;
}
int main()
{
int x,y;
stack s;
printf("请输入一个十进制数:");scanf("%d",&x);
printf("\n");
Initstack(&s);
y=transform(&s,x);
printf("此十进制数转换成的二进制数为:%d\n",y);
}
#define Maxsize 100
#include
#include
typedef struct /*定义顺序栈*/
{
int data[Maxsize];
int Top;
} stack;
void Initstack( stack *s ) /*栈的初始化*/
{
s->Top=0;
}
int push(stack *s,int x) /*入栈*/
{
if(s->Top!=Maxsize-1)
{
s->Top++;
(s->data)[s->Top]=x;
return 1;
}
else
{return 0;}
}
int pop(stack *s) /*出栈*/
{
int x;
if(s->Top!=0)
{
x=(s->data)[s->Top];
s->Top--;
return x;
}
else
{return -1;}
}
int transform(int x) /*实现转换*/
{
stack *s=(stack *)malloc(sizeof(stack));
Initstack( s );
int y,z;
do
{
y=x%2;
x=x/2;
push(s,y);
}while(x!=0);
z=0;
y=0;
do
{
y=10*y+z;
z=pop(s);
}while(z!=-1);
return y;
}
int main()
{
int x,y;
printf("请输入一个十进制数:");scanf("%d",&x);
printf("\n");
y=transform(x);
printf("此十进制数转换成的二进制数为:%d\n",y);
}
#define Maxsize 100
#include
#include
typedef struct /*定义顺序栈*/
{
int data[Maxsize];
int Top;
} stack;
void Initstack( stack *s ) /*栈的初始化*/
{
s->Top=0;
}
int push(stack *s,int x) /*入栈*/
{
if(s->Top!=Maxsize-1)
{
s->Top++;
(s->data)[s->Top]=x;
return 1;
}
else
{return 0;}
}
int pop(stack *s) /*出栈*/
{
int x;
if(s->Top!=0)
{
x=(s->data)[s->Top];
s->Top--;
return x;
}
else
{return -1;}
}
int transform(stack *s,int x) /*实现转换*/
{
int y,z;
do
{
y=x%2;
x=x/2;
push(s,y);
}while(x!=0);
z=0;
y=0;
do
{
y=10*y+z;
z=pop(s);
}while(z!=-1);
return y;
}
int main()
{
int x,y;
stack s;
printf("请输入一个十进制数:");scanf("%d",&x);
printf("\n");
Initstack(&s);
y=transform(&s,x);
printf("此十进制数转换成的二进制数为:%d\n",y);
}