二进制转十进制-栈的方式实现
文章目录
- 二进制转十进制实现
- 测试
二进制转十进制实现
注意因为使用到了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
二进制转十进制-栈的方式实现相关推荐
- 数据结构-栈之二进制转十进制和八进制
栈满则后进先出原则,我们可以利用此特性实现二进制转十进制.二进制转八进制.二进制转十六进制等相关操作,废话不多说,直接上代码. 二进制转十进制: // // Created by Administra ...
- 数据结构算法 二进制转十进制_数据结构 - 栈
两种类似数组的数据结构,在添加和删除元素时更为可控,他们就是栈和队列 栈是一种遵从后进先出(LIFO)原则的有序集合.新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都 ...
- 6-3 十进制转二进制(顺序栈设计和应用) (8 分)
** 6-3 十进制转二进制(顺序栈设计和应用) (8 分) ** 设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出. 函数接口定义: #define MaxSize 100 /* ...
- 栈实现 —— 二进制转换为十进制
二进制转换为十进制 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath& ...
- C++ 二进制、十进制、八进制和十六进制 转换
在C++中,默认状态下,数据按十进制输入输出.如果要求按八进制或十六进制输入输出,在cin或cout中必须指明相应的数据形式,oct为八进制,hex为十六进制,dec为十进制.但是二进制没有默认的输出 ...
- Golang二进制转换十进制代码
为什么80%的码农都做不了架构师?>>> Golang二进制转换十进制代码,使用 container/list 实现出入栈操作,完成转换. 二进制转十进制的方法是:从右到左 ...
- 计算机网络十进制转二进制的应用题,【网络-理论】二进制与十进制的转换
由于计算机中运行的数据都是以二进制数的形式存在的,学习二进制数的计算成为计算机专业必备的一门知识. 概述 正如字面上的意思: 二进制数,满二进一,所以说二进制只由 数字0和数字1组成. 十进制,满十进 ...
- c++十进制转二进制_二进制与十进制相互转换的原理
┇铺垫 二进制,简单来说,是一种运算规则,每一位达到"二"就进一位,故称为"二" "进" 制.在我们日常计算里每一位到"十&quo ...
- JAVA:二进制和十进制互转
package com.xxx.transfer;/*** 数字进制相互转换* @see JDK中提供了这些功能* @author le.li**/ public class NumberUtil { ...
最新文章
- websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制
- 下面哪个字段是http请求中必须具备的_HTTP协议及其工作原理介绍
- VS2010静态编译
- 在AWS中部署OpenShift平台
- Quartz-DateBuilder解读
- java读取src路径下的txt文件_Java程序使用Maven后无法运行?
- LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
- 低学历程序员的红利来了,这个政策来的太惊喜!
- 区块链系列教程之:比特币的世界
- fasync驱动异步通知机制
- sublime编辑器无法正常打印中文问题解决
- 【Redis】Redis Hyperloglog
- Hybrid端口配置理解
- c语言中取反位运算的作用,C语言位运算符及作用与或异或取反左移和右移
- Unity 5.x游戏开发指南笔记(一)
- Escape HDU - 3533
- 世界互联网大会上有哪些黑客科技值得关注?
- 甜椒刷机助手(安卓一键刷机助手) v3.5.1.1 电脑版
- 职业教育转型线上,机构要如何通过直播来引流获客?
- 图像空域增强技术及联合运用