解题思路:

①:根据十进制到八进制的转换为:除8,取余,直到被除数为0,所有余数自下而上就是对应八进制

②:余数的得到就是一个先进后出的过程,所有用栈存储结果

③:栈定义,以及定义栈操作:initialization,push,pop,stackempty

④:栈的初始化

void init(Stack s)
{
   (*s).top=-1;
}/*top初始化为-1,可以使top始终指向栈顶元素,操作方便*/
/*后面注意事项有top=0的写法*/

⑤:push操作

void push_s(Stack s,int num)
{

  (*s).data[++s->top]=num;
}/*栈中第一个元素下标为0,故要先++*/

⑥:pop操作

void pop_s(Stack s,int *e)
{

   (*e)=(*s).data[s->top--];
}/*因为之前top规定始终指向栈顶元素,所以后--*/

⑦:判断空

int stack_empty(Stack s)
{
  if(s->top==-1)/*因为之前规定,所以top==-1为空*/
  return 1;
  else
  return 0;

}

注意事项:

栈初始化top=0的写法,理解不易

/*=======================================*/
void init(Stack s)
{
   (*s).top=0;/*top初始化为0*/
}
/*=======================================*/
void push_s(Stack s,int num)
{

  (*s).data[s->top++]=num;/*要后++*/
}
/*=======================================*/
void pop_s(Stack s,int *e)
{

   (*e)=(*s).data[--s->top];
}/*因为top指向栈顶元素的上一个,所以要先--,指向栈顶元素,返回次元素值后,该元素就
   不是栈里面的元素了,此时栈顶元素为top指向元素的下一个*/
/*=======================================*/
int stack_empty(Stack s)
{
  if(s->top==0)
  return 1;
  else
  return 0;

}


参考代码:

#include<stdio.h>

typedef struct Stack_{

  int data[100];
  int top;

}*Stack,STACK;

void conversion(int num);
void init(Stack s);
void push_s(Stack s,int num);
void pop_s(Stack s,int *e);
int stack_empty(Stack s);


int main()
{

  int num;

  while(scanf("%d",&num)!=EOF)
      conversion(num);

  return 0;
}
/*=======================================*/
void conversion(int num)
{
   int e;
   STACK s;
   init(&s);
   /*do while 当num为0也有正确输出,按照题目思路num为0时,没有入栈*/
    do
    {
       push_s(&s,num%8);
       num/=8;
    }while(num!=0);

     while(!stack_empty(&s))
      {
         pop_s(&s,&e);
         printf("%d",e);
      }

      printf("\n");

}
/*=======================================*/
void init(Stack s)
{
   (*s).top=-1;
}
/*=======================================*/
void push_s(Stack s,int num)
{

  (*s).data[++s->top]=num;
}
/*=======================================*/
void pop_s(Stack s,int *e)
{

   (*e)=(*s).data[s->top--];
}
/*=======================================*/
int stack_empty(Stack s)
{
  if(s->top==-1)
  return 1;
  else
  return 0;

}

别忘点赞哦-.-

点赞(14)
 

0.0分

10 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论