• 栈的应用

栈的一个典型应用是将10进制数转换成等值的二进制数,或者八进制数,由于将十进制数转换成二进制数或者八进制数的时候符合栈的“后进先出”的特性,因为其算法思路就是不断取余然后最后进行逆序输出,所以可以使用栈这种数据结构来实现将十进制数转换成二进制数或者八进制数的算法,由于我们在将十进制数转换成其他的r进制数时用到的是除r取余法,在这个过程中我们所得的余数都应该被存储起来,然后最后逆序输出便可以得到一个十进制数的其它r进制数的表示形式,所以这个过程中我们应该先定义一个栈来存储我们所得的余数,最后不断将栈顶元素输出即可,这题我使用的是顺序栈来实现进制数转换的,关于顺序栈的定义与各种操作的实现我在上一篇博客讲到了,以下是关于顺序栈的定义与各种操作的实现的博客链接

http://t.csdn.cn/EH0E4

下面是代码实现,以及运行结果,关于算法的设计思路我已经在源代码的注释中给出了详细的注释

程序源代码


//栈的定义与运用
//栈是只允许在表一端进行插入和删除的线性表#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>                      //使用realloc函数时需要包含此头文件
#define INIT_SIZE 10
#define STACKINCREMENT 10//顺序栈:采用顺序存储的栈称为顺序栈//定义一个顺序栈,其里面存放的数据类型维整型typedef struct Sqstack
{int* top, * base;int stack_size;}Sqstack,*Sq;//构造空栈
void init_stack(Sq s);//若栈不空则用于返回栈顶元素
int GetTop(Sq s);//若栈不满则插入新的栈顶元素,若栈满,则增容量
void push(Sq s, int e);//若栈不空则删除栈顶元素并将其作为函数返回值返;
int pop(Sq s);int main()
{//栈的应用,将10进制数转换成等值的二进制数,由于将十进制数转换成其它进制数的时候符合栈的后进先出的特性所以可以使用栈这种数据结构来实现将10进制数转换成2进制数的算法,//这里其他进制数指的是八进制或者二进制,不指十六进制数//由于我们在将十进制数转换成其他的r进制数时用到的是除r取余法,在这个过程中我们所得的余数都应该被存储起来,//然后最后逆序输出便可以得到一个十进制数的其它r进制数的表示形式,所以我们应该先应该定义一个空栈用于存放我们的余数Sqstack s;Sq elem_binary = &s;init_stack(elem_binary);int n;//带转换的十进制数int r;//想要将n转换成的进制数,如二进制数,八进制数等;int mo;   //用于保存余数printf("请按顺序输入你想要进行转换的十进制数,以及你想将此十进制数转换成几进制数用阿拉伯数字表示,两个数字之间用半角逗号','分割\n");scanf("%d,%d", &n, &r);while (n > 0){mo = n % r;push(elem_binary, mo);        //将求得的元素进行入栈n = n / r;}//将所有的余数入栈后进行逆序输出其实就是从栈顶元素开始进行出栈操作while (elem_binary->top != elem_binary->base){printf("%d", pop(elem_binary));}return 0;}void init_stack(Sq s)
{s->base = (int*)malloc(sizeof(int) * INIT_SIZE);                         //要养成一个好习惯当使用动态分配内存的函数时需要判断一下动态分配内存是否成功if (!(s->base))exit(-1);                        //判断动态分配内存是否成功;s->top = s->base;s->stack_size = INIT_SIZE;}int GetTop(Sq s)
{if (s->top == s->base)                //注意赋值符号和等好的区别;可以细心一点吗;        {printf("ERROR\n");return -1;}elsereturn *(s->top - 1);
}void push(Sq s, int e)
{//先判断是否栈满,栈满则追加空间;if ((s->top - s->base) >= (s->stack_size)){s->base = (int*)realloc(s->base, sizeof(int) * STACKINCREMENT);if (!s->base){printf("ERROR\n");exit(-1);}//注意当原来的地址后面没有STACKINCREMENT个空间时,relloc函数会重新开辟一个新的空间,然后将新空间的地址作为函数值返回,并将原来的值新拷贝一份到新的空间s->stack_size += STACKINCREMENT;*(s->top) = e;(s->top)++;}else{*(s->top) = e;(s->top)++;}}int pop(Sq s)
{//先判断是否是空栈if (s->top == s->base)               //注意赋值符号和等于号啊!!!{printf("ERROR\n");return -1;}else{(s->top)--;return *(s->top);                   //注意语句顺序!!!}
}

运行结果截图

用栈来实现将一个十进制数转换成等值的二进制数或者八进制数相关推荐

  1. c语言8进制数与16进制数,C语言中的二进制数、八进制数和十六进制数

    C语言中的整数除了可以使用十进制,还可以使用二进制.八进制和十六进制. 二进制数.八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式.但是,表示一个二进制.八 ...

  2. 计算机二进制基础列式,计算机基础;十进制数100对应的二进制数、八进制数和十六进制数分别是...

    中计数采用了多种记数制,比如:十进制,六十进制(六十秒为一分,六十分为一小时,即基数为60,运算规则是逢六十进一),--.在计算机中常用到十进制数.二进制数.八进制数.十六进制数等,下面就这几种在计算 ...

  3. 二进制数、八进制数、十六进制数与…

    整数在内存中是以补码的形式存放的.(符号位1表示负,0表示正) 正数的补码和源码相同:负数的补码=该数绝对值的二进制数-取反-加1: 一个有符号的int型变量(当时2个字节时)取值范围:-2∧15~( ...

  4. 利用栈的基本操作,将一个十进制数转换成8进制数

    题目 利用栈的基本操作,将一个十进制数转换成8进制数 #include<iostream>using namespace std;#define MAXSIZE 100 typedef i ...

  5. 利用栈的特性,将十进制数转换成八进制数

    栈的特定是:先进后出 源程序: //这个程序的目的是让用户输入一个十进制数,然后打出这个数的八进制数 #include<iostream> using namespace std; #de ...

  6. 十进制转二进制转换c语言程序,c语言编程如何实现-十进制数转换成二进制和 – 手机爱问...

    2006-10-10 (1).将十进制正整数转换成k进制(2<=k<=9)的数字输出.例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示1000). (2).请编写函数vo ...

  7. 将十进制数转换成二进制数(C语言)

    C语言--将十进制数转换成二进制数 方法:除 2 取余,逆序排列 原理:用 2 整除十进制整数,可以得到一个商和余数:再用 2 去除商,又会得到一个商和余数,如此进行,直到商为小于 1 时为止,然后把 ...

  8. OJ刷题记录:将十进制数转换成八进制数 题目编号:545

    将十进制数转换成八进制数 题目编号:545 题目要求: 将三个十进制数分别转换成八进制数,建议使用栈来实现. 输入描述 输入三个十进制数,每个占一行. 输出描述 输出每个十进制数所对应的八进制数,每个 ...

  9. C语言算法之将十进制数转换成二进制数

    导语:在C语言中没有将其他进制的数直接输出为二进制数的工具或方法,输出为八进制数可以用%o,输出为十六进制可以用%x,输出为二进制就要我们自行解决了.下面给大家讲述一下如何编程实现将十进制数转换成二进 ...

最新文章

  1. python编程可以做什么工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  2. “互联网+”促传统企业三大转型
  3. python 多个列表_Python同时迭代多个列表
  4. 【HAOI2015】按位或【Min-Max容斥】【FWT】
  5. [BZOJ3529][Sdoi2014]数表
  6. 掌控谈话~拔刺(说出你对我的指控)
  7. 高端的面试从来不会在HashMap的红黑树上纠缠太多
  8. VSCode使用记录三:中文显示乱码、设置字体大小、常用快捷键
  9. equals方法 和 ==的区别
  10. Android进阶(三) 数据存储之SharedPreference
  11. iis由5.1变成5.0——怎么回事呢
  12. 税务会计实务【15】
  13. 爬虫--爬取人人网案列(一)
  14. am相干解调matlab文档,AM调制与相干解调
  15. 安卓学习 布局篇 Android studio
  16. 可以打开c语言的压缩包软件,File Magic(全格式文件打开软件)v1.9.8.19免费版
  17. LTE:PHR Power Headroom Report 功率余量上报
  18. matlab一阶导数图,一阶微分excel【如何用EXCEL做一阶导数图?】
  19. 论文篇:教你如何用chatgpt辅助写论文文献综述
  20. 能耗监测系统的研究与应用

热门文章

  1. hzk组合_HZKM1-400/32002塑壳断路器样本:湘湖电器
  2. 使用液压机压缩气体的空分装置
  3. PVE系统+NAS+WEB 折腾笔记 :3-安装黑群晖
  4. 重新定义线上课堂互动体验,即构推出自研在线白板
  5. 备考初期,这十大心理弱点,你中了几条?
  6. linux屏幕亮度调节 fn,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  7. arduino 休眠 节能_认识与实验Arduino的睡眠模式
  8. linux进程睡眠编程,linux内核编程-可睡眠锁之SRCU
  9. jdk8 stream去重复_重复文件查找和清理工具
  10. Python自动化办公--长图拼接,视频合并