原理:
首先在栈底放入哨兵,接着用算法求出余数,把余数依次放入栈中, 然后取栈顶元素,并且出栈栈顶元素。
//十进制转八进制
#include"stdio.h"
#include"stdlib.h"
#define maxsize 100
typedef struct
{
int data[maxsize];
int top;
}link;
void initializa(link *s)//初始化函数
{
s->top=0;
}
int empty(link *s)//判栈空函数
{
if(s->top==0)
return 1;
else
return 0;
}
int enter(link *s,int x)//进栈函数
{
if(empty(s)==maxsize-1)
{
printf("此栈已满\n");
return 0;
}
else
{
s->top++;
(s->data)[s->top]=x;
}
return 1;
}
int out(link *s,int *x)//出栈函数
{
if(empty(s)==1)
{
printf("此栈为空\n");
return 0;
}
else
{
*x=(s->data)[s->top];
s->top--;
}
return 1;
}
int gettop(link *s,int *x)
{
if(empty(s)==1)
{
printf("无顶可取\n");
return 0;
}
else
{
*x=(s->data)[s->top];
}
return 1;
}
void transform(unsigned x)//转换函数
{
unsigned y=0;
link *s;
s=(link *)malloc(sizeof(link));
initializa(s);//初始化函数
enter(s,'#');//进栈函数,注意这个# 是个字符,要加双引号
while(x!=0)
{
enter(s,x%8);
x=x/8;
}
while(1)//存在栈顶元素
{
gettop(s,&y);//将栈顶元素(也就是最后一个元素)放到y中
if(y!='#')
{
printf("%d",y);
out(s,&y);//出栈函数,将最后一个元素剔除
}
else
break;
}
}
int main()
{
unsigned x;//无符号x,也就是不能是负数
printf("请输入要转换的十进制数:\t");
scanf("%d",&x);
printf("十进制转八进制的结果为:\t");
transform(x);
printf("\n");
return 0;
}
运行之后: