您的位置:首页 > 编程语言 > C语言/C++

C语言通过栈实现将十进制转为八进制输出

2017-03-30 15:48 399 查看
# include<stdio.h>
#include<malloc.h>

# define stackincrement 10
# define stack_size 100
typedef int ElemType;
typedef int status;
typedef int SelemType;

# define OK 1
# define OVERFLOW -1
# define ERROR -1

typedef struct
{
int *base;
int *top;
int stacksize;
} SqStack;

status InitStack(SqStack *S){
S->base = (SelemType *)malloc(stack_size * sizeof(ElemType));
if (!S->base)
{
exit(OVERFLOW);
}
S->top = S->base;
S->stacksize = stack_size;
return OK;
}

status GetTop(SqStack *S,SelemType e){
if(S->top == S->base) return ERROR;
e = (*S->top - 1);
return OK;
}

status Push(SqStack *S,SelemType e){
if ((S->top - S->base ) >= S->stacksize)
{
S->base = (ElemType*)realloc(S->base,(S->stacksize + stackincrement) * sizeof(ElemType));
if (!S->base) exit(OVERFLOW);

S->top = S->base + S->stacksize;
S->stacksize += stackincrement;
}
*S->top++ = e;

return OK;
}

status StackEmpty(SqStack *S){
if (S->base == S->top)
{
return 1;
}else{
return 0;
}
}

status Pop(SqStack *S,SelemType *e){
if (S->top == S->base)
{
return ERROR;
}
S->top = S->top - 1;
*e = *S->top;
return OK;
}

void conversion(SqStack *S,int num){
int a;
while(num){
a = num % 2;
Push(S,a);
num /= 2;
}

printf("转换的八进制数:");
while(!StackEmpty(S)){
SelemType e;
Pop(S,&e);
printf("%d", e);
}
}

main (){
SqStack stack;
InitStack(&stack);
int num;
printf("请输入一个十进制数:");
scanf("%d",&num);
conversion(&stack,num);
}


实现结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: