《数据结构(严蔚敏版)》学习笔记(三)——栈实现数制转换

《数据结构(严蔚敏版)》学习笔记(三)——栈实现数制转换

当S.top == S.base 时,栈为空;

当S.top - S.base >= S.stacksize 时,栈空间满;

转换原理:N = (N div d) * d + N mod d;


N N div 8 N mod 8

1348 168 4

168 21 0

21 2 0

2 0 2


如下代码为10进制转8进制程序:

<span style="font-size:14px;">/*------$栈的应用——数制转换$-------*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//初始定义
typedef int	ElemType;
#define	MAX_SIZE	100
typedef int Status;
#define	OVERFLOW	-1
#define	OK			1
#define	ERROR		0
#define TRUE		1
#define	FALSE		0


/*动态顺序栈-SqStack*/  
typedef struct{
	ElemType	*base;
	ElemType	*top;
	int			stacksize;
}SqStack;

</span>
<span style="font-size:14px;">//初始化栈
Status InitStack(SqStack &S)
{
	if(!(S.base = (ElemType *)malloc(MAX_SIZE * sizeof(ElemType))))	exit(OVERFLOW);
	S.top = S.base;
	S.stacksize = MAX_SIZE;
	return OK;
}

Status Pop(SqStack &S,ElemType &e)
{
	if(S.top == S.base)	return ERROR;
	e = * --S.top;
	return OK;
}

Status Push(SqStack &S,ElemType e)
{
	if(S.top - S.base >= S.stacksize){
		S.base = (ElemType *)realloc(S.base,(S.stacksize + MAX_SIZE) * sizeof(ElemType));
		if(!S.base)	exit(OVERFLOW);
		S.top = S.base + S.stacksize;
		S.stacksize += MAX_SIZE;
	}
	*S.top++ = e;
	return OK;
}

Status StackEmpty(SqStack S)
{
	if(S.base == S.top)
		return TRUE;
	else
		return FALSE;
}

/*算法[非负十进制数,转化成八进制数]*/
void NumeralTrans()
{
	int N;
	ElemType e;
	SqStack S;
	InitStack(S);
	scanf("%d",&N);	</span><pre name="code" class="cpp"><span style="white-space:pre">	</span>while(N){
		Push(S,N % 8);
		N = N/8;
	}
	while(!StackEmpty(S)){
		Pop(S,e);
		printf("%d",e);
	}
}int main(){NumeralTrans();printf("\n");return 0;}

 


算法核心:

栈中存余数,N替换为商

出栈后即为转制后的数

<span style="white-space:pre">	</span>while(N){
		Push(S,N % 8);
		N = N/8;
	}
	while(!StackEmpty(S)){
		Pop(S,e);
		printf("%d",e);
	}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值