新闻动态

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

发布日期:2022-07-20 19:57 | 文章来源:CSDN

问题描述

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

C语言实现

顺序表的存储结构实现栈

代码:

#include <stdlib.h>
#include <stdio.h>
 
#define STACK_INIT_SIZE 100//栈初始开辟空间大小
#define STACK_INCREMENT 10 //栈追加空间大小
 
//栈的结构体
typedef struct stack{
 int *base;
 int *top;
 int size;
}binStack;
 
//栈初始化
binStack stack_init()
{
 binStack bs;
 bs.base = (int *)malloc(sizeof(int)*STACK_INIT_SIZE);
 bs.top = bs.base;
 bs.size = STACK_INIT_SIZE;
 return bs;
}
 
//入栈
void push(binStack *bs, int e)
{
 if(bs->top - bs->base >= bs->size)
 {
  bs->size += STACK_INCREMENT;
  bs->base = realloc(bs->base, bs->size);
 }
 *(bs->top++) = e;
}
 
//出栈
int pop(binStack *bs)
{
 if(bs->top != bs->base)
 {
  bs->top--;
  return *bs->top;
 }
 return -1;
}
 
//主函数
void main()
{
 int dec;
 binStack bs = stack_init();
 printf("请输入十进制整数:\n");
 scanf("%d", &dec);
 while(dec)
 {
  push(&bs, dec%2);
  dec /= 2;
 }
 printf("转换后的二进制数是:\n");
 while(bs.top != bs.base)
 {
  printf("%d", pop(&bs));
 }
 printf("\n\n");
 system("date /T");
 system("TIME /T");
 system("pause");
 exit(0); 
}

运行结果:

Python实现

对于stack我们可以使用python内置的list实现(也可以用链表实现),因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。

代码:

import datetime  //显示时间引入的库
import time//
from pip._vendor.distlib.compat import raw_input  //使命令窗口不立即关闭引入的库
 
//栈类
class BinStack:
 def __init__(self):
  self.bs = []
 
 //入栈
 def push(self, e):
  self.bs.append(e)
 
 //出栈  
 def pop(self):
  if self.bs:
return self.bs.pop()
  else:
raise LookupError("stack is empty!")
 
 //检查栈是否为空,是返回False,不是返回True
 def isEmpty(self):
  return bool(self.bs)
  
if __name__ == '__main__':
 binStack = BinStack()
 dec = int(input("请输入十进制整数:\n"))
 print("转换后的二进制数是:")
 while dec != 0:
  binStack.push(dec%2)
  dec //= 2
 while binStack.isEmpty() == True:
  print("{}".format(binStack.pop()), end="")
 else:
  print("\n")
 //打印时间
 datetime = datetime.datetime.now()
 print(datetime.strftime("%Y-%m-%d\n%H:%M:%S"))
 //使命令窗口不立即关闭
 input("Press Enter to exit…")

运行结果:

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

海外服务器租用

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部