栈的应用——十进制转二进制

利用栈结构,编写程序将十进制数转换成二进制数。
提示:十进制数值转换成二进制使用辗转相除法将一个十进制数值转换成二进制数值。即用该十进制数值除以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);
}

  • 23
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值