设计算法,将十进制整数转换为八进制,在函数中输入数据并输出结果。 

栈的应用举例——数制转换_八进制

由于计算过程是从低位到高位顺序产生八进制数的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈顺序打印输出的即为与输入对应的八进制数

#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int SElemType;
typedef int Status;
typedef struct
{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;
Status InitStack(SqStack *S)
{
	S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if(!S->base)
		exit(OVERFLOW);
	S->top=S->base;
	S->stacksize=STACK_INIT_SIZE;
	return OK;
}
Status Push(SqStack *S,SElemType e)
{
	if(S->top-S->base>=S->stacksize)
	{
		S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
		if(!S->base)
			exit(OVERFLOW);
		S->top=S->base+S->stacksize;
		S->stacksize+=STACKINCREMENT;
	}
	*S->top++=e;
	return OK;
}
Status StackEmpty(SqStack S)
{
	return S.top==S.base;
}
Status Pop(SqStack *S,SElemType *e)
{
	if(S->top==S->base)
		return ERROR;
	*e=*--S->top;
	return OK;
}
void conversion()
{
	SqStack S;
	SElemType e;
	InitStack(&S);
	int n;
	printf("请输入要转换的十进制数:");
	scanf("%d",&n);
	while(n)
	{
		Push(&S,n%8);
		n=n/8;
	}
	printf("得到八进制数为:"); 
	while(!StackEmpty(S))
	{
		Pop(&S,&e);
		printf("%d",e);
	}
}
int main()
{
	conversion();
	return 0;
}