用栈的思想实现将一个十进制数字转换为八进制--数据结构

news2024/9/24 11:22:02

在这里插入图片描述

  • 魔王的介绍:😶‍🌫️一名双非本科大一小白。
  • 魔王的目标:🤯努力赶上周围卷王的脚步。
  • 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥请添加图片描述
    ❤️‍🔥大魔王与你分享:“并不是你喝了一瓶雪花,就有人愿意陪你勇闯天涯。”

文章目录

  • 前言
  • 一、直接十进制转八进制
    • 思路
    • 代码实现
  • 二、栈的思想实现
    • 说明
    • 思路
    • 代码实现
  • 三、总结

前言

学完栈的思想后,我们知道了栈只能从栈顶进出,如果栈顶位置不出,就没办法操纵栈里的其他元素,那么你是否真的理解栈了呢,那就看看你能不能将标题这个进制转换的题用栈的思想实现吧。如果感觉这一题不够,可以点击这里20. 有效的括号跳转到我的另一篇刷题总结,里面的这个题挺有意思,必须运用栈区的思想才能解决,如果不忙的话,希望给个三连❤️‍🔥(点赞)✨(收藏)🥳(评论)!

一、直接十进制转八进制

思路

想要做出这题,那就先实现一下最简单的单纯的十进制转八进制吧。
思路:类比我们一直用的十进制数字,八进制就是大于等于8进1,就这。

代码实现

//输出八进制
#include <stdio.h>
void conversion(int n)
{
	if (n >= 8)
	{
		conversion(n / 8);//递归思想
		printf("%d", n%8);
	}
	else
	{
		printf("%d", n);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	conversion(n);
	return 0;
}

二、栈的思想实现

说明

我们可以通过两种方式实现:
第一种是顺序表,通过尾插实现栈,当然最后打印操作也只能从后往前打印,遵守后进先出的思想,也就会栈的思想。
第二种是链表,通过让首插实现。最后打印的操作是从第一个结点开始,每次弄完要出栈,才能访问下一个结点。
下面是采用顺序表实现的。

思路

上面那个直接实现是用递归(递推回归)在每个栈帧空间结束时打印出相应数字,那么我们用栈的思想的话就需要压栈,先把要打印的东西放进栈里,然后用栈的思想(后进先出),从栈顶开始逐个打印,而且每次打印完栈顶元素,要让栈顶元素弹出(删掉)之后才能访问接下来的元素(后进先出,只能从栈顶进出)。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef int DateType;

typedef struct Stack
{
	DateType* arr;
	int sz;//元素的个数,是从一开始的,所以访问时要-1才是对应的元素。
	int capacity;
}Stack;

void CheckStack(Stack* s)
{
	assert(s);
	if (s->sz == s->capacity)
	{
		Stack* temp = (DateType*)realloc(s->arr, sizeof(DateType) * s->capacity * 2);
		assert(temp);//判断是否开辟成功
		s->arr = temp;
		temp = NULL;//野指针置空
		s->capacity *= 2;
	}
}

void PushStack(int n, Stack* s)
{
	assert(s);
	CheckStack(s);
	s->arr[s->sz] = n;
	s->sz++;
}

bool EmptyStack(Stack*s)
{
	assert(s);
	if (s->sz == 0)//s->sz是元素个数,所以为0是就是空,返回真。
	{
		return true;
	}
	return false;
}

void InitStack(Stack* s)
{
	assert(s);
	s->arr = malloc(sizeof(DateType) * 5);
	s->sz = 0;
	s->capacity = 5;
}

void PopStack(Stack* s)
{
	assert(s);
	assert(s->sz);//s->sz是个数,所以为0时没意义,如果为0,应该是进不去的,但是既然进来了,那肯定某个地方错了。
	s->sz--;
}

void conversion(int n, Stack* s)
{
	assert(s);
	if (n >= 8)
	{
		PushStack(n % 8, s);
		conversion(n / 8, s);
	}
	else
		PushStack(n, s);
}

int main()
{	
	Stack s;
	InitStack(&s);
	int* arr = NULL;
	int n = 0;
	scanf("%d", &n);
	conversion(n, &s);
	while(!EmptyStack(&s))//不是空进入循环,是空就退出
	{
		printf("%d", s.arr[s.sz-1]);
		PopStack(&s);
	}
	return 0;
}

三、总结

在这里插入图片描述
✨请点击下面进入主页关注大魔王
如果感觉对你有用的话,就点我进入主页关注我吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单点定位2米精度?这张卡差点干掉了RTK(内有轨迹对比图)

单点定位2米精度&#xff1f;现在的定位芯片卷成这样了&#xff1f;上面两张卡一款是主打高性能融合定位的星斗3&#xff0c;另一款是主打高性价比高精度低功耗的DNA-1&#xff0c;今天小编给两张定位卡做评测。 话不多说先上轨迹图&#xff1a; 这张图是我们拿着星斗3号RTK定…

小程序封装拖拽菜单组件(uniapp拖拽排序,自定义菜单)

效果展示 思路 使用movable-area作为可移动区域,并在内部循环渲染列表项view,绑定touch事件。在mounted生命周期函数内获取区域movable-area的dom信息,记录列表项的坐标信息。在methods中定义了列表项的touchstart、touchmove和touchend事件的方法,用于实现列表项的拖拽移动和…

偶数社区投稿丨OushuDB学习实践系列(一):开一家超市

大家好&#xff0c;我是镜镜呀&#xff0c;也是一名技术开发人员。本系列内容&#xff0c;也将由技术点出发&#xff0c;从数据库的使用、实践开始&#xff0c;逐步增加对整体的认知&#xff0c;由点及面&#xff0c;真正理解 OushuDB、数据湖仓一体在技术上的变革&#xff0c;…

@Configuration 和 @Component 注解的区别

一句话概括就是 Configuration 中所有带 Bean 注解的方法都会被动态代理&#xff0c;因此调用该方法返回的都是同一个实例。 理解&#xff1a;调用Configuration类中的Bean注解的方法&#xff0c;返回的是同一个示例&#xff1b; 而调用Component类中的Bean注解的方法&#x…

【社区图书馆】携程架构与实践图书

发这篇博文主要是想学习一下携程的架构。携程出了一本《携程架构实践》&#xff0c;无奈现在还没开源。看京东价大概109元人民币。如果看到次博文的网友能发我一本《携程架构实践》pdf。不胜感谢。或者实体书籍也行。其实我不怎么需要实体书籍&#xff0c;因为技术的东西很快会…

使用 IDEA 远程 Debug 调试

背景 有时候我们需要进行远程的debug&#xff0c;本文研究如何进行远程debug&#xff0c;以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 配置 远程debug的服务&#xff0c;以springboot微服务为例。首先&#xff0c;启动springboot需要加上特定的参数。…

小白下载以后打不开怎么解决

我们重装系统时&#xff0c;大家会遇到各种各样的问题&#xff0c;现在有一些想用小白一键重装系统工具来帮助自己完成系统重装时&#xff0c;却发现我们打不开这个工具&#xff0c;现在不知道其原因有哪些&#xff0c;那么大家今天就来告诉小伙伴们小白一键重装官网下载以后打…

计算机概述

计算机&#xff1a; 硬件&#xff1a; CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09;靠大脑思考&#xff0c;电脑靠CPU来运算、控制。硬盘&#xff08;Hard Disk Drive&#xff09; 计算机最主要的存储设备&#xff0c;容量大&#xff0c;断电数…

创新,阿里首发微服务实施手册我粉了,原来微服务还可以这样玩

微服务 相信大家在网上会看到很多帖子把分布式跟微服务放在一起讨论。确实&#xff0c;微服务就是一种分布式架构的设计方法。但是&#xff0c;在微服务概念还没有出现之前&#xff0c;分布式这个概念并不能引起人们的强烈关注&#xff0c;如果说自己擅长分布式架构设计&#…

TCP,TCP 连接建立,TCP 连接断开,Socket 编程

目录 TCP基本认识 TCP 头格式有哪些&#xff1f; 为什么需要 TCP 协议&#xff1f; TCP 工作在哪一层&#xff1f; 什么是 TCP &#xff1f; 什么是 TCP 连接&#xff1f; #如何唯一确定一个 TCP 连接呢&#xff1f; UDP 和 TCP 有什么区别呢&#xff1f;分别的应用场景是…

【教学类-34-02】拼图(英文大写字母)3*2格子(中班主题《个别化拼图》偏艺术-美术)

作品展示&#xff1a; 背景需求 3*4块运动拼图对幼儿有点难&#xff08;不熟悉图案内容、拼图数量多&#xff09; 1、选择幼儿相对熟悉的的字母&#xff08;26个&#xff0c;基本满足28人&#xff09; 2、拼图数量&#xff1a;2*36块 3、做的小一点&#xff0c;一张2份&am…

【软件测试面试】全网最全,自动化测试面试题总结大全(付答案)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面试题1&#xff…

企企通项目入选《2023爱分析·供应链和采购数字化最佳实践案例》

近日&#xff0c;“2023爱分析供应链和采购数字化最佳实践案例”评选活动落下帷幕&#xff0c;主要围绕实践领先性、案例创新性、应用成熟度、价值创造四个维度对候选实践案例进行评选。企企通凭借自身丰富的采购供应链解决方案经验&#xff0c;以“迈金科技采购数字化管理平台…

美洽迈入“生成式AI时代”,开启智能客服新纪元!

生成式 AI&#xff0c;当前科技领域最热门的话题之一。 它指的是一类人工智能模型&#xff0c;可以根据输入的数据&#xff0c;自动生成新的数据或者输出一些有用的信息&#xff0c;例如&#xff1a;文本、图像、音频、视频等等。 在实际应用中&#xff0c;生成式AI可以帮助人…

“COMSOL电化学系列,锂离子电池仿真,燃料电池仿真

背景&#xff1a; 电化学仿真技术通过对电池微观行为进行研究&#xff0c;明晰电池内部多现象机理&#xff0c;并将其数值化&#xff0c;通过数值方法实现对物理特征联合计算&#xff0c;建立完整的电池模型。COMSOL Multiphysics具有强大的多物理场全耦合仿真分析功能、高效的…

Django框架介绍及搭建开发环境

介绍 是一个开放源代码的web应用框架&#xff0c;由python编写。 与常规的MVC架构不同&#xff0c;为MTV架构。 MTV Model(模型)&#xff1a;负责业务对象和数据库的关系映射&#xff08;ORM&#xff09;。 Template(视图)&#xff1a;负责把页面展示给用户&#xff08;htm…

Win32API之实现远程线程注入(九)

什么是注入 注入是一种在不知情或未经许可的情况下向其他进程中注入模块并试图执行它们的技术 常见的注入方式有&#xff1a;远程线程注入、APC注入、消息钩子注入、注册表注入、导入表注入、输入法注入等等 什么是远程线程注入 远程线程注入是一种技术&#xff0c;可以将一…

前端vue之根据内容生成二维码

1.实现这功能需要借助第三方插件,首先下载安装插件: 我在终端直接下载 npm install vue-qr --save2.在需要的.vue文件中引入并注册组件 import VueQr from vue-qr; export default {components: {VueQr,},3.在需要用的位置使用该二维码标签 <vue-qr :logo-src"logoS…

自动控制原理模拟卷6

自动控制原理模拟题六 Question1 已知控制系统的信号流图如下图所示: 求控制系统传递函数 C ( s ) / R ( s ) C(s)/R(s) C(s)

[mars3d] 学习

今天整体说下mars3d&#xff0c;集成问题之后在说&#xff0c;先说下概念性的东西&#xff1b; 一、设置地球的参数 下载他们的示例&#xff0c;如果不是特别的要求&#xff0c;可以直接使用他们的 confign 进行加载&#xff1b; 如果有什么特别的设置的&#xff0c;可以通过…