解题思路:
①:根据十进制到八进制的转换为:除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分
11 人评分