请选择 进入手机版 | 继续访问电脑版
查看: 113|回复: 0

Python和C语言利用栈分别实现进制转换

[复制链接]

2198

主题

0

回帖

7027

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7027
发表于 2022-10-9 01:08:27 | 显示全部楼层 |阅读模式
问题描述

利用栈的数据结构实现将十进制数转换成二进制数

C语言实现

顺序表的存储结构实现栈
代码:
  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. #define STACK_INIT_SIZE 100   //栈初始开辟空间大小
  4. #define STACK_INCREMENT 10    //栈追加空间大小

  5. //栈的结构体
  6. typedef struct stack{
  7.     int *base;
  8.     int *top;
  9.     int size;
  10. }binStack;

  11. //栈初始化
  12. binStack stack_init()
  13. {
  14.     binStack bs;
  15.     bs.base = (int *)malloc(sizeof(int)*STACK_INIT_SIZE);
  16.     bs.top = bs.base;
  17.     bs.size = STACK_INIT_SIZE;
  18.     return bs;
  19. }

  20. //入栈
  21. void push(binStack *bs, int e)
  22. {
  23.     if(bs->top - bs->base >= bs->size)
  24.     {
  25.         bs->size += STACK_INCREMENT;
  26.         bs->base = realloc(bs->base, bs->size);
  27.     }
  28.     *(bs->top++) = e;
  29. }

  30. //出栈
  31. int pop(binStack *bs)
  32. {
  33.     if(bs->top != bs->base)
  34.     {
  35.         bs->top--;
  36.         return *bs->top;
  37.     }
  38.     return -1;
  39. }

  40. //主函数
  41. void main()
  42. {
  43.     int dec;
  44.     binStack bs = stack_init();
  45.     printf("请输入十进制整数:\n");
  46.     scanf("%d", &dec);
  47.     while(dec)
  48.     {
  49.         push(&bs, dec%2);
  50.         dec /= 2;
  51.     }
  52.     printf("转换后的二进制数是:\n");
  53.     while(bs.top != bs.base)
  54.     {
  55.         printf("%d", pop(&bs));
  56.     }
  57.     printf("\n\n");
  58.     system("date /T");
  59.     system("TIME /T");
  60.     system("pause");
  61.     exit(0);   
  62. }
复制代码
运行结果:


Python实现

对于stack我们可以使用python内置的list实现(也可以用链表实现),因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。
代码:
  1. import datetime  //显示时间引入的库
  2. import time      //
  3. from pip._vendor.distlib.compat import raw_input  //使命令窗口不立即关闭引入的库

  4. //栈类
  5. class BinStack:
  6.     def __init__(self):
  7.         self.bs = []
  8.    
  9.     //入栈
  10.     def push(self, e):
  11.         self.bs.append(e)
  12.    
  13.     //出栈     
  14.     def pop(self):
  15.         if self.bs:
  16.             return self.bs.pop()
  17.         else:
  18.             raise LookupError("stack is empty!")
  19.    
  20.     //检查栈是否为空,是返回False,不是返回True
  21.     def isEmpty(self):
  22.         return bool(self.bs)
  23.         
  24. if __name__ == '__main__':
  25.     binStack = BinStack()
  26.     dec = int(input("请输入十进制整数:\n"))
  27.     print("转换后的二进制数是:")
  28.     while dec != 0:
  29.         binStack.push(dec%2)
  30.         dec //= 2
  31.     while binStack.isEmpty() == True:
  32.         print("{}".format(binStack.pop()), end="")
  33.     else:
  34.         print("\n")
  35.     //打印时间
  36.     datetime = datetime.datetime.now()
  37.     print(datetime.strftime("%Y-%m-%d\n%H:%M:%S"))
  38.     //使命令窗口不立即关闭
  39.     input("Press Enter to exit…")
复制代码
运行结果:

以上就是Python和C语言利用栈分别实现进制转换的详细内容,更多关于Python进制转换的资料请关注趣UU其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
打赏作者
  • 0
  • 0
  • 0
  • 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表