文章目录

  • 二进制转十进制实现
    • 测试

二进制转十进制实现


注意因为使用到了math.h中的函数,编译的时候需要连接数据函数库,即 -lm

#include <stdio.h>
#include <stdlib.h>
#include <math.h>#define STACK_INIT_SIZE 20
#define STACKINCREMENT  10typedef char ElemType;
typedef struct
{ElemType *base;ElemType *top;int stackSize;
}sqStack;void InitStack(sqStack *s);void Push(sqStack *s, ElemType e);void Pop(sqStack *s, ElemType *e);int StackLen(sqStack s);void InitStack(sqStack *s)
{s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if( !s->base ){exit(0);}s->top = s->base;s->stackSize = STACK_INIT_SIZE;
}void Push(sqStack *s, ElemType e)
{if( s->top - s->base >= s->stackSize ){s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));if( !s->base ){exit(0);}}*(s->top) = e;s->top++;
}void Pop(sqStack *s, ElemType *e)
{if( s->top == s->base ){return;}*e = *--(s->top); //< top指向的元素为栈顶,栈顶为下个要存数据的地方,因此、要取数据应该先下移一位之后再取出数据
}int StackLen(sqStack s)
{return (s.top - s.base);
}int main()
{ElemType c;sqStack s;int len, i, sum = 0;InitStack(&s);printf("请输入二进制数,输入#符号表示结束!\n");scanf("%c", &c);while( c != '#' ){Push(&s, c);getchar();  // 把'\n'从缓冲区去掉scanf("%c", &c);}len = StackLen(s);printf("栈的当前容量是: %d\n", len);for( i=0; i < len; i++ ){Pop(&s, &c);printf("%c\n", c);sum = sum + (c-48) * pow(2, i);}printf("转化为十进制数是: %d\n", sum);return 0;
}

测试

andrew@andrew-Thurley:/work/linux-sys/data_structure_sqlite/src$ ./bin2dec
请输入二进制数,输入#符号表示结束!
1
0
1
0
1
0
1
0
1
0
#
栈的当前容量是: 10
0
1
0
1
0
1
0
1
0
1
转化为十进制数是: 682

二进制转十进制-栈的方式实现相关推荐

  1. 数据结构-栈之二进制转十进制和八进制

    栈满则后进先出原则,我们可以利用此特性实现二进制转十进制.二进制转八进制.二进制转十六进制等相关操作,废话不多说,直接上代码. 二进制转十进制: // // Created by Administra ...

  2. 数据结构算法 二进制转十进制_数据结构 - 栈

    两种类似数组的数据结构,在添加和删除元素时更为可控,他们就是栈和队列 栈是一种遵从后进先出(LIFO)原则的有序集合.新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都 ...

  3. 6-3 十进制转二进制(顺序栈设计和应用) (8 分)

    ** 6-3 十进制转二进制(顺序栈设计和应用) (8 分) ** 设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出. 函数接口定义: #define MaxSize 100 /* ...

  4. 栈实现 —— 二进制转换为十进制

    二进制转换为十进制 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath& ...

  5. C++ 二进制、十进制、八进制和十六进制 转换

    在C++中,默认状态下,数据按十进制输入输出.如果要求按八进制或十六进制输入输出,在cin或cout中必须指明相应的数据形式,oct为八进制,hex为十六进制,dec为十进制.但是二进制没有默认的输出 ...

  6. Golang二进制转换十进制代码

    为什么80%的码农都做不了架构师?>>>    Golang二进制转换十进制代码,使用 container/list 实现出入栈操作,完成转换. 二进制转十进制的方法是:‍‍从右到左 ...

  7. 计算机网络十进制转二进制的应用题,【网络-理论】二进制与十进制的转换

    由于计算机中运行的数据都是以二进制数的形式存在的,学习二进制数的计算成为计算机专业必备的一门知识. 概述 正如字面上的意思: 二进制数,满二进一,所以说二进制只由 数字0和数字1组成. 十进制,满十进 ...

  8. c++十进制转二进制_二进制与十进制相互转换的原理

    ┇铺垫 二进制,简单来说,是一种运算规则,每一位达到"二"就进一位,故称为"二" "进" 制.在我们日常计算里每一位到"十&quo ...

  9. JAVA:二进制和十进制互转

    package com.xxx.transfer;/*** 数字进制相互转换* @see JDK中提供了这些功能* @author le.li**/ public class NumberUtil { ...

最新文章

  1. websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制
  2. 下面哪个字段是http请求中必须具备的_HTTP协议及其工作原理介绍
  3. VS2010静态编译
  4. 在AWS中部署OpenShift平台
  5. Quartz-DateBuilder解读
  6. java读取src路径下的txt文件_Java程序使用Maven后无法运行?
  7. LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
  8. 低学历程序员的红利来了,这个政策来的太惊喜!
  9. 区块链系列教程之:比特币的世界
  10. fasync驱动异步通知机制
  11. sublime编辑器无法正常打印中文问题解决
  12. 【Redis】Redis Hyperloglog
  13. Hybrid端口配置理解
  14. c语言中取反位运算的作用,C语言位运算符及作用与或异或取反左移和右移
  15. Unity 5.x游戏开发指南笔记(一)
  16. Escape HDU - 3533
  17. 世界互联网大会上有哪些黑客科技值得关注?
  18. 甜椒刷机助手(安卓一键刷机助手) v3.5.1.1 电脑版
  19. 职业教育转型线上,机构要如何通过直播来引流获客?
  20. 图像空域增强技术及联合运用

热门文章

  1. ASP.NET AJAX入门系列(3):使用ScriptManagerProxy控件
  2. hdu 4012(bfs+位压缩)
  3. 基于ssm的学生成绩管理系统
  4. redis主从架构宕机问题手动解决
  5. eayUi panel实现上一页下一页
  6. 中缀表达式生成二叉树
  7. easyui from 缓存问题处理
  8. uvalive 4795 Paperweight
  9. synergy软件ubuntu配置
  10. 10.4.4 使用ctypes调用kernel32.dll中的函数