c语言/c++(数据结构篇) 之 栈的数制转换实例(栈和队列)(3/7)

实验目的及要求:

熟悉利用栈完成m进制数向n进制数的转换。

实验内容:

利用栈完成数制转换。

目的:掌握栈的后进先出原则在解决实际问题中的应用。

内容:利用栈进行数制转换,以m进制数向n进制数转换为例。用栈编写满足下列要求的程序:

对输入的任意个非负m进制数,打印出与其值相等的n进制数。

具体实现过程:

1、定义栈,包括初始分配,栈顶指针,栈底指针。

2、定义需要用到的函数。

(1)构造空栈:InitStack()

(2)进栈:Push()

(3)出栈:Pop()

(4):数制转换函数:Conversion()

3、对函数进行连接。

实验步骤与程序:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define SIZE 100

typedef struct

{

      int *base;

      int *top;

      int size;

}sqstack;

sqstack initstack()

{

      sqstack s;

      s.base = (int *)malloc(SIZE * sizeof(int));

      s.top = s.base;

      s.size = 0;

      return s;

}

sqstack push(sqstack s, int e)

{

      *s.top = e;

      s.top++;

      s.size++;

      return s;

}

sqstack pop(sqstack s)

{

      if (s.top == s.base)

      {

            return s;

      }

      s.top--;

      return s;

}

int tranto10(char *ch, int m)

{

      int res = 0;

      for (int i = 0; i < strlen(ch); i++)

      {

            if (ch[i] >= '0'&&ch[i] <= '9')

            {

                  res = res * m + ch[i] - '0';

            }

            if (ch[i] >= 'A'&&ch[i] <= 'Z')

            {

                  res = res * m + ch[i] - 'A' + 10;

            }

      }

      return res;

}

sqstack tranton(int data, int n)

{

      sqstack s;

      s = initstack();

      while (data)

      {

            s=push(s, data%n);

            data = data / n;

      }

      return s;

}

void print(sqstack s)

{

      while (1)

      {

            s = pop(s);

            int c = *s.top;

            if (c >= 10)

            {

                  printf("%c ", 'A' + c - 10);

            }

            else

            {

                  printf("%d ", c);

            }   

            if (s.top==s.base)

                  break;

      }

      printf("\n");

}

int main()

{

      int m, n;

      printf("请输入转化前后的进制,以空格分隔\n");

      scanf("%d %d", &m, &n);

      printf("请输入 %d 进制数字\n", m);

      char str[100] = { 0 };

      scanf("%s", str);

      int ten = tranto10(str, m);

      sqstack s = tranton(ten, n);

      printf("转化后的结果如下:\n");

      print(s);

      return 0; }

运行结果:

结果分析与讨论:

  1. 栈最重要的特点是后进先出,也就是说,在将元素读出栈时,与入栈的顺会是正好相反的。
  2. 栈分为顺序栈和链式栈两种。栈的基本特点是先入栈的元素后离栈,可以用栈来改变顺序,可以用来实现进制的转换。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君无戏言。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值