数据结构:利用顺序栈实现十进制转化为二进制(含注释和完整代码,可复制)

发布时间:2024年01月14日

在写代码之前,我们首先要了解关于顺序栈的实现和十进制转化为二进制的实现。对于第一个关于顺序栈的实现,我在之前的博客里有详细的介绍,顺序栈的实现? ?(? http://t.csdnimg.cn/cWJXn),在这里就不过多的介绍。对于十进制转二进制,它可以采用除2取余法,首先不断将十进制除以2,每次记录余数,直到商数为0为止,然后将得到的所有余数全部排列起来,再将它反过来(逆序排列)。

1.关于顺序栈的代码

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;}
}

2.进制转换代码

下面这段代码是一个用 C 语言实现的数制转换函数,将输入的整数 ?x??转换为二进制数,并将结果存储在栈 ?s??中,最后将栈中的二进制数转换为十进制数并返回。

下面分段解释这段代码的功能:

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);
}

3.完整代码

#define Maxsize 100
#include <stdio.h>
#include<malloc.h>
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);
}
文章来源:https://blog.csdn.net/m0_75115696/article/details/135584887
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。