数据结构:利用栈实现数制转换

这篇具有很好参考价值的文章主要介绍了数据结构:利用栈实现数制转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数制转换

从键盘输入一个十进制数n,并输入要转换的进制数m,利用栈将n转换成m进制,并输出转换后的结果。

首先设计一个含有多个菜单项的主菜单程序,然后再为这些菜单项配上相应的功能。

主菜单设计要求:

程序运行后,显示一个标题“进制转换”,标题下方给出4个菜单项的内容和输入提示:

  1. 输入一个十进制数n
  2. 输入进制转换m
  3. 进制转换
  4. 继续否?(y/n)

请选择1—4:

功能要求:

完成各菜单的要求,能用栈正确转换数制

栈是限定仅在表尾进行插入或删除操作的线性表,后进先出

特别注意:

进行进制转换时要考虑十六进制的特殊性,为完成十进制与十六进制间的转换利用if语句,对e的值进行判断:

当e大于10时,为保证十六进制正确转换:

当e的值等于11时,输出A;

当e的值等于12时,输出B;

当e的值等于13时,输出C;

当e的值等于14时,输出D;

当e的值等于15时,输出E;

流程图:

利用栈实现数制转换,数据结构,数据结构,算法


 

实验代码:文章来源地址https://www.toymoban.com/news/detail-730061.html

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100                               //顺序栈存储空间的初始分配量
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;


//顺序栈的存储结构
typedef struct{
	SElemType *base;                                      //栈底指针
	SElemType *top;                                       //栈顶指针
	int stacksize;                                        //栈可用的最大容量
}SqStack;


//顺序栈的初始化
Status InitStack(SqStack &S)                                           //构建一个空栈S
{
	S.base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));    //为顺序栈动态分配一个容量为STACK_INIT_SIZE的数组空间 
	if(!S.base)
		exit (OVERFLOW);                                               //存储分配失败
	S.top = S.base;                                                    //top初始为base,空栈
	S.stacksize = STACK_INIT_SIZE;                                     //stacksize置为栈的最大容量STACK_INIT_SIZE
	return OK;
}


//顺序栈的入栈
Status Push(SqStack &S,SElemType e)
{                                             
	if(S.top - S.base == S.stacksize ){
		S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));     //栈满,追加存储空间
	if(!S.base)
		return OVERFLOW;                                               //存储分配失败
	S.top=S.base +S.stacksize;
	S.stacksize+=STACKINCREMENT;
	}
	*S.top++ = e;                                                      //元素e压入栈顶,栈顶指针加一
	return OK;
}


//顺序栈的出栈
Status Pop(SqStack &S,SElemType &e)                            //         
{
	
	if(S.top==S.base)
		return ERROR;                                          //栈空,返回ERROR
	e = *--S.top;                                              //栈顶指针减一,将栈顶元素赋给e
	return e;
}


//主函数
int main()
{
	int choice;
	char c;
	int n,m;
	SElemType e;
	SqStack S;
	InitStack(S);
	printf("**********进制转换**********\n");
	printf("1.请输入一个十进制数n\n");
	printf("2.请输入转换的进制m\n");
	printf("3.进制转换\n");
	printf("4.继续或退出(y/n)\n");
	while(choice)                                          //保证操作的选择循环进行
	{
		printf("请选择操作1--4:\n");
		scanf("%d",&choice);
		if(choice >4 ||choice<=0)                          //如果输入的操作数不符合条件,则退出程序
		{
			printf("您输入的数据有误!\n");
			return 0;                                      //返回0,结束循环,退出程序
		}
		while(choice <= 4)                                 //进行操作1--4的选择
		{
			if(choice == 1)                               
			{
				printf("请输入一个十进制数:\n");
				scanf("%d",&n);
				break;
			}
			if(choice == 2)
			{
				printf("请输入转换的进制:\n");
				scanf("%d",&m);
				break;
			}
			if(choice == 3)
			{
				printf("进制转换:\n");
				while(n!=0)
				{
					Push(S,n%m);
					n=n/m;
				}
				while(S.top!=S.base)
				{
					e=Pop(S,e);
					if(e<10)
						printf("%d",e);
					else if(e>=10)
					{
						if(e==10)
							printf("A");
						if(e==12)
							printf("B");
						if(e==13)
							printf("C");
						if(e==14)
							printf("D");
						if(e==15)
							printf("E");
					}
				}
				printf("\n");
				break;
			}
			if(choice == 4)
			{
				printf("请输入y/n选择继续或退出\n");
				getchar();
				scanf("%c",&c);
				if(c=='y')
				{
					printf("请输入操作1--4继续运行程序:\n");
					scanf("%d",&choice);
				}
				if(c == 'n')
					return 0;                                     //返回0,结束循环,退出程序
			}
		}
	}
}

到了这里,关于数据结构:利用栈实现数制转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构——前缀、中缀、后缀表达式实现和转换(Java)

    1.7.1 概念 它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于 运算符相对与操作数的位置 不同 前缀 表达式的运算符位于与其相关的 操作数之前 ;中缀和后缀同理。 平时我们 日常使用 并最为熟悉的就是中缀表达式。如: 1 + 2 *

    2024年02月05日
    浏览(40)
  • 【数据结构-进制转换】用栈实现10进制数转任意进制数

    用栈实现10进制数转任意进制数代码实现 主要思想 :一个十进制数转成相应进制,是通过自身除于对应进制得余数,直到商为0.将所有余数逆序(即最先得到的余数放最后面)排列,得到的结果为所得相应进制数。这一特性与栈极其类似,栈也是 先进后出 原则,故用栈更为

    2023年04月08日
    浏览(28)
  • 【数据结构】利用顺序栈/链栈完成表达式求值(C语言实现)

    利用顺序栈完成表达式求值(将字符型转换为整型) 程序代码: #include stdio.h #include malloc.h #include stdlib.h #include math.h #define MAXSIZE 100 #define ElemType char #define LEN sizeof ( ElemType ) typedef struct {     ElemType * data;     int top; } SqStack ; void InitStack( SqStack * S ) {     S -data = ( ElemType *)

    2024年02月05日
    浏览(37)
  • 用栈的思想实现将一个十进制数字转换为八进制--数据结构

    魔王的介绍:😶‍🌫️一名双非本科大一小白。 魔王的目标:🤯努力赶上周围卷王的脚步。 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍🔥大魔王与你分享:“并不是你喝了一瓶雪花,就有人愿意陪你勇闯天涯。” 学完栈的思想后,我们知道了栈只能从栈顶进出,如果

    2023年04月24日
    浏览(30)
  • 【数据结构与算法】JavaScript实现图结构

    一、图论 1.1.图的简介 什么是图? 图结构 是一种与 树结构 有些相似的数据结构; 图论 是数学的一个分支,并且,在数学中,树是图的一种; 图论以图为研究对象,研究 顶点 和 边 组成的 图形 的数学理论和方法; 主要的研究目的为: 事物之间的联系 , 顶点 代表 事物

    2024年02月05日
    浏览(37)
  • 【数据结构与算法】JavaScript实现排序算法

    一、大O表示法 大O表示法: 在计算机中采用 粗略的度量 来描述计算机算法的 效率 ,这种方法被称为 “大O”表示法 在 数据项个数 发生改变时, 算法的效率 也会跟着改变。所以说算法A比算法B快两倍,这样的比较是 没有意义 的。 因此我们通常使用 算法的速度 随着 数据

    2024年02月02日
    浏览(36)
  • 【数据结构与算法C++实现】3、排序算法

    原视频为左程云的B站教学 外层循环 :n个数需要冒n-1个泡上去,剩下的一个必然是最小的。所以外层循环执行n-1轮 内层循环 :比大小,第1个泡需要比n-1次,第2个泡,比较n-2次… 选择: 每次从待排序序列中选择 最小的一个 放在已排序序列的后一个位置 原理类似于对扑克牌

    2024年02月11日
    浏览(45)
  • 【数据结构与算法】队列的实现

    🌠 作者:@ 阿亮joy. 🎆 专栏:《数据结构与算法要啸着学》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先

    2024年02月07日
    浏览(40)
  • 数据结构上机实验——栈和队列的实现、栈和队列的应用、进制转换、约瑟夫环问题

      1.利用栈的基本操作实现将任意一个十进制整数转化为R进制整数。   2.利用循环队列实现.约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人出圈;他的下一个人又从1开始报数,数到k的那个人出圈;依

    2024年02月08日
    浏览(30)
  • 数据结构和算法——用C语言实现所有图状结构及相关算法

    本文所有代码均在仓库中,这是一个完整的由纯C语言实现的可以存储任意类型元素的数据结构的工程项目。 首先是极好的工程意识,该项目是一个中大型的CMake项目,结构目录清晰,通过这个项目可以遇见许多工程问题并且可以培养自己的工程意识。 其次是优秀的封装性(

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包