利用栈和递归实现进制转换——数据结构实验报告

一、实验名称:栈的应用——进制转换

二、实验目的

熟练掌握栈的两种存储方式的具体实现过程,并分别使用递归和非递归两种方式,实现进制转换。

三、实验要求

  1. 顺序栈和链栈两种存储方式任选一种,实现从十进制到八进制的转换。
  2. 用递归的方法实现上述功能。
  3. 改进算法,实现从十进制到N进制的转化(0<N<10,由用户输入确定。)

四、实验环境

(1) 硬件环境:微机一台;

(2) 软件环境:windows7+VC++ 2010/6.0集成开发环境。

五、实验内容及测试分析

   实验一:

  1. 编程思想

(本次编程是利用顺序栈实现从十进制到八进制的转换)

  1. 十进制转换为八进制是利用短除法,然后再进行倒序取余;可以利用栈先进后出的特性,实现目的存储;
  2. 首先调用InitStack( )函数构建一个空栈;
  3. 利用while循环通过调用入栈Push(S,N%8)将N%8的结果压入栈中,循环体内N=N/8,循环结束条件N=0;
  4. 存储结束后,再利用while循环通过调用出栈Pop( )函数依次输出栈顶的值即可实现倒序输出,循环结束条件为栈为空,此时需要调用判空StackEmpty ( )函数;
  5. 在main主函数中输入十进制数N,通过调用进制转换函数即可实现八进制转换。

  (上述函数均已声明定义并实现。)

  1. 程序代码
  2.  主要代码如下:
 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;

 

 } //结束

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值