一、实验名称:栈的应用——进制转换
二、实验目的
熟练掌握栈的两种存储方式的具体实现过程,并分别使用递归和非递归两种方式,实现进制转换。
三、实验要求
- 顺序栈和链栈两种存储方式任选一种,实现从十进制到八进制的转换。
- 用递归的方法实现上述功能。
- 改进算法,实现从十进制到N进制的转化(0<N<10,由用户输入确定。)
四、实验环境
(1) 硬件环境:微机一台;
(2) 软件环境:windows7+VC++ 2010/6.0集成开发环境。
五、实验内容及测试分析
实验一:
- 编程思想
(本次编程是利用顺序栈实现从十进制到八进制的转换)
- 十进制转换为八进制是利用短除法,然后再进行倒序取余;可以利用栈先进后出的特性,实现目的存储;
- 首先调用InitStack( )函数构建一个空栈;
- 利用while循环通过调用入栈Push(S,N%8)将N%8的结果压入栈中,循环体内N=N/8,循环结束条件N=0;
- 存储结束后,再利用while循环通过调用出栈Pop( )函数依次输出栈顶的值即可实现倒序输出,循环结束条件为栈为空,此时需要调用判空StackEmpty ( )函数;
- 在main主函数中输入十进制数N,通过调用进制转换函数即可实现八进制转换。
(上述函数均已声明定义并实现。)
- 程序代码
- 主要代码如下:
void conversion_8(int N) //十进制转换为八进制
{
SqStack S;
int e;
InitStack(S); //构建空栈
while(N){ //N为非0时执行
Push(S,N%8); //将N对8取余的值压入栈中
N/=8; //N更新为N/8
}
cout<<"转化后的八进制数为:";
while(!StackEmpty(S)){ //判空
Pop(S,e); //依次出栈
cout<<e;
}
cout<<endl;
} //结束