原题链接:数据结构-八进制数
解题思路:
①:根据十进制到八进制的转换为:除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分
10 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复