Manchester


私信TA

用户名:wenyajie

访问量:312329

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62665
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:

①:根据十进制到八进制的转换为:除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;

}

别忘点赞哦-.-

 

0.0分

8 人评分

  评论区