C语言实现任意栈之间的进制转换

2023-05-16

题目:

        利用栈,将十进制数字N转换为D进制(D=2,8,16),其中16进制对应的符号是0~9,A~F。

        要求:十进制数字和N进制从键盘输入获得,从屏幕显示进制转换后的数字。

代码:

#include <stdio.h>
#define StackSize 100
#define true 1
#define false 0
typedef int DataType;

typedef struct{
	DataType data[StackSize];
	int top;
}SeqStack; 

typedef struct Node{
	DataType data;
	struct Node *next;
}*LinkStack;

//顺序栈初始化 
void InitStack(SeqStack &S){
	S.top=-1;
} 

//判断顺序栈是否满
int StackEmpty(SeqStack &S){
	if(S.top==-1){
		return true;
	}else{
		return false;
	}
} 

//顺序栈进栈
int Push(SeqStack &S,DataType x){
	if(S.top==StackSize-1){
		return false;
	}else{
		S.top++;
		S.data[S.top]=x;
		return true; 
	}
} 

//顺序栈出栈
int Pop(SeqStack &S,DataType &x){
	if(S.top==-1){
		return false;
	}else{
		x=S.data[S.top];
		S.top--;
		return true;
	}
} 

//顺序栈进制转换
void Conversion(){
	int N,D,e;
	SeqStack S;
	InitStack(S);
	printf("请输入要转换的十进制数字是:");
	scanf("%d",&N);
	printf("请输入要转换的进制是(2-9及16):");
	scanf("%d",&D); 
	int num=N;
	while(N){
		Push(S,N%D);
		N=N/D;	
	}
	while(!StackEmpty(S)){
		Pop(S,e);
		if(e>9){
			//十六进制 
			printf("%c",e+55);
		}else{
			printf("%d",e);
		}		
	}
	printf("\n"); 
} 

//链式栈是否为空栈 
int Empty2(LinkStack top){
	if(top==NULL){
		return true;
	}
	return false;
} 

//链式栈进栈
int Push2(LinkStack *top,DataType x){
	LinkStack s;
	s=new Node;
	if(s==NULL){
		return false;
	}else{
		s->data=x;
		s->next=(*top);
		(*top)=s;
		return true;
	}
} 

//链式栈出栈 
int Pop2(LinkStack *top,DataType *x){
	if(top!=NULL){
		LinkStack p=(*top);
		(*x)=(*top)->data;
		(*top)=(*top)->next;
		delete(p);
	}
	return false;
} 
 
int main(){
	
	while(1){
		printf("请选择所需功能:\n");
		printf("1、使用链栈转换\n");
		printf("2、使用顺序栈转换\n");
		printf("3、退出程序\n\n");
		int number;
		scanf("%d",&number); 
		if(number==1){
			Conversion2();
		}else if(number==2){
			Conversion();
		}else if(number==3){
			break;
		}else{
			printf("输入有误!\n");
		}
	}
	return 0;
} 

效果图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言实现任意栈之间的进制转换 的相关文章

  • 毕业设计源码基于Spring Boot的旅游管理系统的实现

    摘 要 社会的发展和科学技术的进步 xff0c 互联网技术越来越受欢迎 网络计算机的 交易 方式逐渐受到广大人民群众的喜爱 xff0c 也逐渐进入了每个 用户 的使用 互联网具有便利性 xff0c 速度快 xff0c 效率高 xff0c 成
  • 轮询、中断和DMA三种方式的原理和联系

    CPU控制外部设备的方式 xff1a 中断 轮询 DMA 轮询中断DMA 由于外部设备的速度差异 xff0c CPU可以使用不同的方式控制外部设备的访问 常见的方式轮询 中断和DMA 轮询 轮询最简单 xff0c CPU通过不断地查询某个外
  • OpenMV识别色块与STM2F4通过串口通信

    花了三天时间学习了一下OpenMV的简单使用 xff0c 在这写个博客记录一下 xff0c 并且上传自己的代码 xff0c 以方便交流学习 第一次发帖 xff0c 不周之处见谅 首先概括一下我实现的功能 xff1a OpenMV识别红色色块
  • c++语言简单提问

    1 定义一个空的类型 xff0c 里面没有任何成员变量和成员函数 对该类型求sizeof xff0c 得到的结果是 1 2 为什么不是0 空类型的实例中不包含任何信息 xff0c 本来求sizeof应该是0 xff0c 但是当我们声名该类型
  • 二 ROS通信机制-话题通信(发布订阅模式)

    二 ROS通信机制 话题通信 发布订阅模式 ROS 中的基本通信机制2 1话题通信 发布订阅模式 2 1 1概念2 1 2作用2 1 3 理论模型2 1 4 话题通信应用时需要关注的地方 xff1a 3 简单实现3 1ROS工作空间建立 x
  • 解决ROS中运行launch文件报错ERROR: cannot launch node of type[xxx/xxx]:xxx的问题

    解决ROS中运行launch文件报错ERROR cannot launch node of type xxx xxx xxx的问题 错误截图 xff1a 原因 xff1a 解决方式 xff1a 当时我出现的错误是 ERROR cannot
  • c++ stl 五种迭代器

    c 43 43 stl 五种迭代器 2010 12 31 14 22 25 分类 xff1a C 43 43 C 举报 字号 订阅 下载LOFTER 我的照片书 迭代器的分类 Iterator Categories I
  • C语言头文件中定义变量问题(转)

    上个星期回学校的时候 xff0c 刚好碰到一个学弟在写程序 xff0c 并且刚好碰到一个总编不过去的问题 xff0c 我看了看 xff0c 正好是个头文件重复包含问题 xff0c 问题描述如下 xff1a 他在程序中建立了一个global
  • Opencv Aruco识别(python)

    效果图 先上效果 代码 直接上代码 xff1a span class token operator span span class token operator span usr span class token operator span
  • Windows下Cmake安装步骤详解(图文)

    文章目录 Cmake介绍Cmake下载及安装 Cmake介绍 CMake是一个跨平台的安装 xff08 编译 xff09 工具 xff0c 可以用简单的语句来描述所有平台的安装 编译过程 xff0c 并且输出对应的makefile或者pro
  • C语言:通过指针模拟实现strcat函数

    模拟实现strcat strcat函数的功能 把src所指向的字符串 xff08 包括 0 xff09 复制到dest所指向的字符串后面 xff08 删除dest原来末尾的 0 xff09 要保证dest足够长 xff0c 以容纳被复制进来
  • C语言中将字符串拆分再进行拼接

    我们有时候需要对于字符串进行操作 xff0c 主要用到strcat和strtok两个函数 xff0c 因此记录下这次的操作方式以便之后查阅 span class token macro property span class token d
  • 并行编程实现矩阵乘法优化

    实现四种矩阵乘法程序 xff0c 并对比运行效率 1 xff09 串行算法 2 xff09 Catch优化 3 xff09 SSE版本 4 xff09 分片策略 span class token macro property span cl
  • c++的函数reserve()和unique()和sort()

    函数reserve span class token comment vector reserve span span class token macro property span class token directive keywor
  • 关于c中代码加 ‘\‘ 进行换行的说明

    我们在c与c 43 43 中经常会遇到一种情况就是加 进行换行来保持代码整体结构一致的使用情况 xff0c 那么具体来说换行的规则是什么 xff0c 这里进行一下记录 span class token macro property span
  • git的命令总结

    先把清单列出来git cheat sheet git 命令总结 git的init和git clonegit add和git commit 提交二连git checkout 反向操作git reset 回退HEAD指针git revert 同
  • 宏定义中的可变参数 __VA_ARGS__ 用法 与 #和##的用法

    首先了解一下可变参数 span class token macro property span class token directive keyword include span span class token string lt st
  • C++结构体简单链表原理解释

    对结构体简单链表原理的简单解释 xff0c 程序如下 xff1a struct lianbiao int no string name struct lianbiao next lianbiao head 61 nullptr tail 6
  • linux小连招

    Linux命令目录 查看当前shell的种类find命令查找文件 查看当前shell的种类 查看当前发行版可以使用的shell xff1a chao 64 chao span class token function cat span et

随机推荐