数据结构--数制的转换

【案例分析】

    当将一个十进制整数N转换为八进制数时,在计算过程中,把N与8求余得到的八进制数的各位依次进栈,计算完毕后将栈中的八进制数依次出栈输出,输出结果就是待求得的八进制数

【案例实现】

在具体实现时,栈可以采用顺序存储表示也可以采用链式存储表示。

算法-----数制的转换

【算法步骤】

1、初始化一个空栈S。

2、当十进制数N非零时,循环执行以下操作:

    把N与8求余得到的八进制数压入栈S;

    N更新为N与8的商。

3、当栈S非空时,循环执行以下操作:

扫描二维码关注公众号,回复: 1440526 查看本文章

    弹出栈顶元素e;

    输出e。

【算法描述】

这里我们使用的是伪代码,只是为了便于理解

void conversion(int n)
{//对于任意一个非负十进制数,打印输出与其等值的八进制数
  InitStack(S);           //初始化栈
  while(N)                //当N非零时,循环
  {
     Push(S,N%8);         //把N与8求余得到的八进制数压入栈S
      N=N/8;              //N更新为N与8的商
  }
  while(!StackEmpty(S))   //当栈为非空时,循环
  {
     Pop(S,e);            //弹出栈顶元素e
     cout<<e;             //输出e
  }
}

【算法分析】

     显然,该算法的时间和空间的复杂度均为O(log8^n).

    这是利用栈的后进先出特征的最简单的例子。在这个例子中,栈的操作是单调的,即先一味地入栈,然后一味地出栈。也许,有的读者会提出疑问:用数组直接实现不是更简单吗?但仔细分析上述算法不难看出,栈的引入简化了程序设计的问题,划分了不同的关注层次,使思考范围缩小了。而数组不仅掩盖了问题的本质,还要分散精力去思考数组下标增减等细节问题。

猜你喜欢

转载自blog.csdn.net/sdwujk160507140150/article/details/79817208