顺序栈-使用顺序栈实现十进制转换二进制

 1 #include"stdio.h"
 2 #define MaxSize 50
 3 typedef int DataType;
 4 typedef struct{
 5     DataType elem[MaxSize];
 6     int top;
 7 }SeqStack;
 8 void initStack(SeqStack &s)
 9 {
10     s.top = -1;
11 }
12 int push(SeqStack &s , DataType x)
13 {
14     if(s.top == MaxSize -1) return 0;
15     s.elem[++s.top] = x;
16     return 1;
17 }
18 int pop(SeqStack &s , DataType &x)
19 {
20     if(s.top == -1) return 0;
21     x = s.elem[s.top--];
22     return 1;
23 }
24 main()
25 {
26     int x;
27     int n;
28     int r;
29     SeqStack s;
30     initStack(s);
31     scanf("%d",&n);
32     r = n%2;
33     while(n!=0 &&push(s , r))
34     {
35         n = n/2;
36         r = n%2;
37     }
38     while(pop(s , x))
39     {
40         printf("%d",x);
41     }
42 }

原文地址:https://www.cnblogs.com/sucker/p/10766031.html

时间: 2024-08-28 15:57:22

顺序栈-使用顺序栈实现十进制转换二进制的相关文章

Formiko总结整数十进制转换二进制原理

引子: 为什么十进制转二进制的“辗转相除记录余数倒序输出”的算法是正确的?这个问题陪伴了Formiko半年. 实践: 实践一:把十进制数100转换成二进制数的图   上图和和下图唯一的区别在最后一位上,只是除到0和除到1的区别,但在算法本身的理解上应该不会有本质的区别. 实践二: 十进制数100或许太大,不便于一目了然的验证.试一试十进制数1,2,3. 思考: 以上算法的思路是“对原数反复进行除法得到余数,最后将余数倒序输出”.但是看到如图对十进制数100,1,2,3的操作,都看不出原思路的由来

C语言 十进制转换二进制

十进制转换二进制主要采用的是连除倒取余的方法  代码如下 int num = 8; int tempArr[32]={0}; int i = 0; while (num / 2 != 1 ) { tempArr[i] = num % 2; num /=2; i++; } tempArr[i+1] = 1; for (int j = sizeof(tempArr)/sizeof(int)-1; j>=0; j--) { printf("%d", tempArr[j]); }

十进制转换二进制

// 十进制转换二进制 private static String convertBinary(int sum) { StringBuffer binary = new StringBuffer(); while (sum != 0 && sum != 1) { binary.insert(0, sum % 2); sum = sum / 2; if (sum == 0 || sum == 1) { binary.insert(0, sum % 2); } } return binary.

Problem O(十进制转换二进制)

Problem Description Give you a number on base ten,you should output it on base two.(0 < n < 1000) Input For each case there is a postive number n on base ten, end of file. Output For each case output a number on base two. Sample Input 1 2 3 Sample O

6-4 十进制转换二进制 (15 分)

本题要求实现一个函数,将正整数n转换为二进制后输出. 函数接口定义: void dectobin( int n ); 函数dectobin应在一行中打印出二进制的n.建议用递归实现. 裁判测试程序样例: #include <stdio.h> void dectobin( int n ); int main() { int n; scanf("%d", &n); dectobin(n); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 10 输出

进制转换之二进制与十进制转换

一.正整数的十进制转换二进制: 要点:除二取余,倒序排列 解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等 于一或零时为止,倒取将除得的余数,即换算为二进制数的结果 例如把52换算成二进制数,计算结果如图: 52除以2得到的余数依次为:0.0.1.0.1.1,倒序排列,所以52对应的二进制数就是110100. 由于计算机内部表示数的字节单位都是定长的,以2的幂次展开,或者8位,或者16位,或者32位..... 于是,一个二进制数用计算机表示时,位数不足2的幂次时,高位上要补足若干个

Java 控制台做个十进制和二进制互相转换

计算机使用的是二进制,计算机只认识0和1 我们日常使用的是十进制,满十进一 既然计算机只认识0和1,那么我们日常使用的计算机时如何操作呢 这就需要一套二进制和十进制互相转换的公式了 首先说十进制转换二进制,就是不断的用十进制的数字除以2,直到十进制的数字最后为0时,将余数倒序排列就是十进制的二进制表示了 如下,十进制数字12转换为二进制 12 / 2 = 6 余数为 0 6 / 2 = 3   余数为 0 3 / 2 = 1   余数为 1 1 / 2 = 0   余数为 1 然后将余数倒序连起

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明: 往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能 关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名 代码如下: #i

数据结构_线性表_顺序存储之1顺序栈2共享栈_链式存储之链栈_栈的应用举例

1>//栈是先进后出,后进先出的线性表 简称LIFO线性表 //栈的顺序存储结构成为顺序栈(sequebtial stack). //顺序栈利用一组地址连的存储单元依次存放从栈底到 栈顶的数据元素,通常用一维数组存放栈的元素 //"指针"top并非指针,而是表示栈顶元素的当前位置 //top不是指针型变量而是整形变量,top=0空栈,top=MaxSize 表示满栈,当top>maxsize 表示栈溢出 代码 #include <stdio.h> #includ