数据结构栈的应用:数制转换

以数制转换问题讲解栈数据结构的基本概念及其在计算机中的应用 以数制转换问题讲解栈数据结构的基本概念及其在计算机中的应用 一、栈的概念介绍   在我们的生活中,总有这么一些例子,①食堂在堆放餐盘的时候,总是从下往上,在取餐盘的时候,又是从上往下;②最先放入厢式货车的货物,最后才能取出;③普通手枪的子弹夹,先装进弹夹的子弹,最后才会被打出来。类似于这样的场景还有很多,这样的存取顺序,我们称之为先进后出(LIFO)。这种存取方式在解决某些计算机问题的时候非常高效,因此... 阅读详情

内容:数据结构第三章:栈的应用

参考书:数据结构严书,高一凡数据结构与算法

测试软件:Visual Studio 2017

原理解释:将十进制转换成其它进制

整数情况:(基数除法)

把要转换的十进制数除以新的进制的基数,把余数作为新进制的最低位;

把上一次得的商在除以新的进制基数,把余数作为新进制的次低位;

继续上一步,直到最后的商为零,这时的余数就是新进制的最高位。

整个过程正好与栈的入栈、出栈顺序相同。
如:
在这里插入图片描述
c1.h:

#ifndef __C1_H
//#define __C1_H
//c1.h(头文件名)
#include <string.h>     //字符串函数头文件
#include <ctype.h>      //字符函数头文件
#include <malloc.h>     //malloc()等
#include <limits.h>     //INT_MAX等
#include <stdio.h>      //标准输入输出头文件,包括EOF( = ^Z 或F6),NULL等
#include <stdlib.h>     //atoi(), exit()
#include <io.h>         //eof()
#include <math.h>       //数学函数头文件,包括floor(), ceil(), abs()等
#include <sys/timeb.h>  //ftime()
#include <stdarg.h>   //提供宏va_start, va_arg, va_end,用于存取变长参数表
//函数结果状态代码。在严书第十页
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
//#define INFESIBLE -1
//#define OVERFLOW -2   因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedef int Status; //Status是函数的;类型其值是函数结果状态代码,如OK等
typedef int Boolean; //Boolean是布尔类型,其值是TRUE或FALSE,第7、8、9章用到
typedef int SElemType;
typedef SElemType ElemType;
#define STACK_INIT_SIZE 10
#define STACK_INCREMENT 2
struct SqStack
{
	SElemType * base;
	SElemType * top;
	int stacksize;
};
#endif // !__C1_H
#pragma once

main.cpp:

# define N 8    //将要转换的进制数
#include "c1.h"

void InitStack(SqStack &s)  //栈的初始化
{
	s.base = (SElemType *)malloc(sizeof(SElemType) * STACK_INIT_SIZE);
	if (!s.base)
		exit(OVERFLOW);
	s.top = s.base;
	s.stacksize = STACK_INIT_SIZE;  //初始空间 10
}
Status StackEmpty(SqStack s)   //判断是否为空
{
	if (s.base == s.top)
		return TRUE;
	else
		return FALSE;
}
void Push(SqStack &s, SElemType e)  //入栈
{
	if ((s.top - s.base) == s.stacksize)
	{
		s.base = (SElemType *)realloc(s.base, sizeof(SElemType) * (s.stacksize + STACK_INCREMENT));
		if (!s.base)
			exit(OVERFLOW);
		s.top = s.base + STACK_INCREMENT;
		s.stacksize = s.stacksize + STACK_INCREMENT;
	}
	*(s.top)++ = e;   //e入栈
}
Status Pop(SqStack &s, SElemType &e)  //出栈
{
	if (s.top == s.base)
		return ERROR;
	e = *--s.top;  //s.top指向栈顶元素的下一个位置
	return OK;
}
void test_1(void)
{	//对于输入的任意一个非负十进制整数,打印输出与其等值的N进制数
	SqStack s;
	unsigned n;
	SElemType e;
	InitStack(s);
	printf("将十进制整数n转换为%d进制数,请输入正整数n:", N);
	scanf("%u", &n);
	while (n)
	{
		Push(s, n%N);
		n = n / N;
	}
	while (!StackEmpty(s))
	{
		Pop(s, e);
		printf("%d", e);
	}
	printf("\n");
}
int main(void)
{
	test_1();
	return 0;
}
算法:数制转换(栈的应用)-数据结构(6) 一、算法描述 将一个数按照想要的进制,进行转换。用到的栈的原因是,计算出来的数是从第一位开始的,为了方便输出,进行的栈的运用。其实就是逆序输出P48 二、数据结构与算法 1、数据结构(栈) #define STACK_INIT_SIZE 100//存储空间初始分配量 #define STACKINCREMENT 10//存储空间分配增量 typedef struct{ SElemType 阅读详情

相关推荐

数据结构 中数制转换(栈的应用)

主要介绍了数据结构 中数制转换(栈的应用)的相关资料,需要的朋友可以参考下

数据结构_数值转换

一、 目的 将任意一个浮点数转换成二进制数 二、实习环境 个人计算机,Windows操作系统,Visual C++6.0编译开发环境 三、实习内容、步骤与要求 将一个浮点数转换成二进制数,需要用到两个结构,一个是队列,一个是栈。对于整数部分,采用栈的形式;对于小数部分,采用队列的形式。具体步骤如下: 整数部分:用2去除十进制整数,可以得到一个商和余数; ...

weixin_30700099的博客 1043

机器学习第五章之决策树模型

机器学习专题系列

wangyutao12345的博客 5187

数据结构-栈的运用-数的进制转换

有关进制转换的四种方法 没听错 粗略是三种,看完后一定会有很大的收获的

m0_61196970的博客 5187

CMOS锁相环核心:四种鉴频鉴相器(PFD)结构深度剖析与选型指南

本文深入剖析了CMOS锁相环中四种鉴频鉴相器(PFD)的结构与性能,包括传统RS触发器型、非时钟型、预充电型和边沿触发型PFD。通过详细的电路分析、实测数据和工程案例,提供了PFD选型的实用指南,帮助工程师根据速度、功耗和精度需求选择最优方案,提升锁相环设计效率。

weixin_42530458的博客 588

千兆以太网 PCB 设计实战:4层板 100Ω 差分对布线,EMI 降低 6dB 实测

本文详细解析了千兆以太网 PCB 设计中的关键技术与实战经验,重点介绍了4层板上100Ω差分对的优化布线方法,通过实测数据展示了EMI降低6dB的有效方案。内容涵盖层叠设计、阻抗计算、布线技巧及EMI抑制措施,为硬件工程师提供了一套完整的高速电路设计解决方案。

weixin_29175469的博客 426

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

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

努力敲代码 1万+

值得苦练的100道Python经典练手题(全网最全,附详细答案,建议收藏)

这100道Python练习题涵盖了从基础语法到高级算法、从数据库操作到Web开发的各个方面,是备考数据库系统工程师的绝佳素材。建议按照章节顺序逐一练习,遇到难点可反复钻研,真正掌握每一道题背后的知识点。通过这些练习,不仅能提升Python编程能力,还能加深对数据库系统原理的理解,为考试和实际工作打下坚实基础。

yue_yun_的博客 9395

数据结构c/c++栈的应用---数值转换

数据结构c/c++栈的应用—数值转换 数制转换的过程:① 初始化一个空栈S。 ② 当十进制数N非零时,循环执行以下操作:把N与r求余得到的r进制数压入栈S;N更新为N与r的商。 ③ 当栈S非空时,循环执行以下操作:弹出栈顶元素e;输出e。 头文件为: #include<stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100 typedef struct //定义一个栈 { SElemTy

m0_47671062的博客 2673

无迹卡尔曼滤波 (UKF, Unscented Kalman Filter) 算法详解及案例分析

无迹卡尔曼滤波是一种用于估计非线性系统状态的递归算法。其目标是通过结合系统模型和观测数据,估计系统的最优状态。

闲人编程的博客 2629

基于逆向工程的中国裁判文书网爬虫技术深度解析:从反爬破解到合规抓取

最近承接了一个法律大数据分析的项目,需要获取某类合同纠纷的裁判文书数据,用于分析不同地区的判决规律、法官的裁判倾向以及法条适用情况。原本以为用常规的Python爬虫就能搞定,结果刚对着中国裁判文书网发了几个请求,就遭遇了“滑铁卢”:要么请求直接返回403 Forbidden,要么触发滑块验证码,甚至连IP都被临时封禁了。普通的requests+BeautifulSoup组合在裁判文书网面前完全失效,这也让我意识到,想要获取这里的数据,必须先通过逆向工程拆解网站的请求逻辑和反爬机制。经过一周的摸索,从抓包分析

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3172

数据结构 -> 栈 及栈的应用:数制转换

栈(stack) 是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊的含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。 定义: 定义和线性表一样; #include<iostream> using namespace std; typedef int* date; #define Size 1 typedef struct link { date elem = NULL; int legth = 0; ..

MeOutsider的博客 961

金融领域图注意力网络的创新应用

随着金融市场的日益复杂和数据量的爆炸式增长,传统的数据分析方法在处理金融数据的复杂关系和结构时面临诸多挑战。图注意力网络(Graph Attention Network,GAT)作为一种新兴的深度学习技术,能够有效处理图结构数据,挖掘数据中的潜在关系。本文的目的在于深入探讨图注意力网络在金融领域的创新应用,涵盖风险评估、投资决策、欺诈检测等多个方面。通过理论分析、算法实现和实际案例展示,为金融从业者和研究者提供全面的技术参考,推动图注意力网络在金融领域的广泛应用。

AI云原生与云计算技术学院 721

数据结构:栈的应用。算法解析-栈应用数制的转换

栈 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 特点:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最

阿杜的博客 769

YOLOv12超参数智能优化:基于内置Ray Tune的自动化调优实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有! 目标检测模型的性能瓶颈往往源于超参数配置不当。传统手动调优方式不仅耗时耗力,且难以找到全局最优解。YOLOv12集成的Ray Tune框架为解决这一难题提供了完整方案,通过分布式异步优化算法,可实现超参数搜索效率的指数级提升。实际测试表明,采用Ray Tune自动调优的YOLOv12模型,在COCO数据集上mAP指标平均提升3.8%,收敛速度加快2.1倍。在VisDrone无人机数据集上的跨域测试

LXY_LOVE36的博客 119

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据结构 04-栈的应用:数制转换的代码实现

2. 应用场景:数制转换 十进制转换为N进制,“除以N”的过程,得到的余数是从低到高的次序,而输出则是从高到低,所以需要一个栈来反转次序。

一分耕耘一分收获 1463

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《数据结构》—— 关于栈的应用:数制的转换

十进制转为八进制,用链栈实现,链栈的基本操作不变,定义一个算法调用即可。

博樽 544

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数据结构:栈的应用(数制转换)

数据结构:栈的应用(数制转换)以十进制转二进制为例

m0_64257657的博客 323

数据结构(C语言)读书笔记5:栈的应用之数制转换及C语言代码实现

十进制数N转换成其他d进制数的转换是计算机实现计算的基本问题,解决方法很多,其中一个简单算法基于如下原理:N=(N div d)*d +N mod d ,主要涉及到进栈和出栈。 算法描述://十进制转换成其他进制  void coversion () { int N,e,d;//十进制N转换成d进制数 InitStack(&S);//构造空栈 scanf(“%d”,&N); wh

彬彬有礼 3135

《数据结构》栈应用:数制转换及括号匹配

将十进制数字转换为八进制数字(可直接运行) 【案例分析】 当将一个十进制整数N转换为八进制数时,在计算过程中,把N与8求余得到的八进制数的各位依次进栈,计算完毕后将栈中的八进制数依次出栈输出,输出结果就是待求得的八进制数 【案例实现】 在具体实现时,栈可以采用顺序存储表示也可以采用链式存储表示。本次采用顺序栈的存储结构 #include"stdio.h" #include"stdlib.h" #include"iostream" using namespace std; #define ..

qq_59511462的博客 321

数据结构实验二:栈的应用之数制转换

【代码】数据结构实验二:栈的应用之数制转换。

weixin_73933353的博客 149

数据结构题典020:栈的应用——数制转换(ANSI C)

题目:将十进制数 src 转换为 k 进制数。 原理:N = ( N div k ) x k + N mod k,其中div为整除,mod为取余。 void num_sys_convert( int src, int k ) { link_stack ls; init_stack_link( &ls ); while( src != 0 ) { push_link( &ls,

DUAN的专栏 726

JS中的算法与数据结构——栈(Stack)

栈(Stack) 上一篇我们说到了列表,它是一种最自然的数据组织方式,如果对数据的存储顺序要求不重要,那么列表就是一种非常适合的数据结构,但对于计算机其他的一些应用(比如后缀表达式),那么列表就显得有些无能为力, 所以,我们需要一种和列表功能相似但更复杂的数据结构。 栈,又叫堆栈,是和列表类似的一种数据结构,但是却更高效,因为栈内的元素只能通过列表的一端访问,称为栈顶,数据只能在栈顶添加或

面向对象的夜猫子 583

【数据结构与算法】 栈——栈的应用举例(3例)

根据“后进先出”特性,生活中的例子比比皆是,本文举3例。 1数制转换 2括号匹配验证 3表达式求值

TW_345的专栏 8087

栈的应用

一、栈应用之一:数制转换 将十进制数转换成其它进制的数有一种简单的方法: 例:十进制转换成八进制:(66)10=(102)8 66/8=8 余 2 8/8=1 余 0 1/8=0 余 1 结果为余数的逆序:102 。先求得的余数在写出结果时最后写出,最后求出的余数

晓夜璨丰 454

数据结构与算法Javascript描述(一)栈

栈的特点: 后入先出。 Stack类: function Stack() { this.dataSource = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.clear = clear; this.length = length

Preserve 627
上一篇: 数据结构:栈的实现
下一篇: CCF:小中大
SuperGao1314
博客等级 码龄9年 1粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值