数据结构--数制的转换

【案例分析】

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

【案例实现】

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

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

【算法步骤】

1、初始化一个空栈S。

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

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

    N更新为N与8的商。

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

    弹出栈顶元素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).

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

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
结构中的数制转换是将一个数从一种数制转换为另一种数制的过程。下面是一个C语言的数制转换实例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 #define MAXBUFFER 10 typedef struct { char *base; char *top; int stacksize; } SqStack; void InitStack(SqStack *s) { s->base = (char *)malloc(STACK_INIT_SIZE * sizeof(char)); if (!s->base) exit(0); s->top = s->base; s->stacksize = STACK_INIT_SIZE; } void Push(SqStack *s, char e) { if (s->top - s->base >= s->stacksize) { s->base = (char *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(char)); if (!s->base) exit(0); s->top = s->base + s->stacksize; s->stacksize += STACKINCREMENT; } *(s->top) = e; s->top++; } void Pop(SqStack *s, char *e) { if (s->top == s->base) return; *e = *--(s->top); } int StackLen(SqStack s) { return s.top - s.base; } int main() { SqStack s; char c, e; int len, i, sum = 0, product = 1; InitStack(&s); printf("请输入一个二进制数:"); scanf("%c", &c); while (c != '\n') { Push(&s, c); scanf("%c", &c); } len = StackLen(s); for (i = 0; i < len; i++) { Pop(&s, &e); sum += (e - '0') * product; product *= 2; } printf("转换为十进制数为:%d\n", sum); return 0; } ``` 该代码实现了将一个二进制数转换为十进制数的功能。具体实现过程是:先将输入的二进制数逐个压入栈中,然后依次弹出栈顶元素,计算出对应的十进制数并相加,最终得到转换后的十进制数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值