• 十进制转化为二进制(栈算法)


    输入一个十进制数转化为二进制输出

    算法:先将十进制数一直取余,对应的倒序输出则为二进制数,栈的出栈的规则为先进后出,故满足倒序输出

    代码:

      1 #include "stdafx.h"
      2 
      3 #include<stdlib.h>
      4 
      5 #include<malloc.h>
      6 
      7 
      8 
      9 #define STACK_SIZE 100
     10 
     11 #define STACKINCREAMENT 10
     12 
     13 #define ERROR 0
     14 
     15 #define OK 1
     16 
     17 #define OVERFLOW -2
     18 
     19 
     20 
     21 typedef int SElemType;
     22 
     23 typedef int Status;
     24 
     25 typedef int CElemType;
     26 
     27 
     28 
     29 //定义栈结构体
     30 
     31 typedef struct Stack{
     32 
     33     SElemType *base;
     34 
     35     SElemType *top;
     36 
     37     int stacksize;
     38 
     39 }SqStack;
     40 
     41 
     42 
     43 //函数声明
     44 
     45 Status InitStack(SqStack &S);
     46 
     47 CElemType Push(SqStack &S, int e);
     48 
     49 CElemType PrintfStack(SqStack S);
     50 
     51 CElemType PopStack(SqStack &S);
     52 
     53 Status StackLength(SqStack S);
     54 
     55 
     56 
     57 int main()
     58 
     59 {
     60 
     61     SqStack S;
     62 
     63     InitStack(S);
     64 
     65     int i, e, n, a;
     66 
     67     printf("请输入需要转化的十进制数:");
     68 
     69     scanf_s("%d", &a);
     70 
     71     i = a;
     72 
     73     while (a >= 1)
     74 
     75     {
     76 
     77         e = a % 2;
     78 
     79         Push(S, e);
     80 
     81         a /= 2;
     82 
     83     }
     84 
     85     printf("%d转化为二进制为:", i);
     86 
     87     PrintfStack(S);
     88 
     89 }
     90 
     91 
     92 
     93 //构建新的空栈
     94 
     95 Status InitStack(SqStack &S)
     96 
     97 {
     98 
     99     S.base = (SElemType*)malloc(STACK_SIZE*sizeof(SElemType));
    100 
    101     if (!S.base)
    102 
    103         return ERROR;
    104 
    105     S.top = S.base;
    106 
    107     S.stacksize = STACK_SIZE;
    108 
    109     return OK;
    110 
    111 }
    112 
    113 
    114 
    115 //入栈操作
    116 
    117 CElemType Push(SqStack &S, int e)
    118 
    119 {
    120 
    121     SElemType *p;
    122 
    123     if (S.top - S.base >= S.stacksize)
    124 
    125     {
    126 
    127         S.base = (SElemType*)realloc(S.base, (STACK_SIZE + STACKINCREAMENT)*sizeof(SElemType));
    128 
    129         if (!S.base)
    130 
    131             exit(OVERFLOW);
    132 
    133         p = S.base;
    134 
    135         S.top = S.base + S.stacksize;
    136 
    137         S.stacksize += STACKINCREAMENT;
    138 
    139     }
    140 
    141     *S.top++ = e;
    142 
    143     return OK;
    144 
    145 }
    146 
    147 
    148 
    149 //出栈操作
    150 
    151 CElemType PopStack(SqStack &S)
    152 
    153 {
    154 
    155     if (S.base == S.top)
    156 
    157     {
    158 
    159         printf("The Stack is Empty!!!
    ");
    160 
    161         return OK;
    162 
    163     }
    164 
    165     printf("出栈的元素为%d
    ", *(S.top - 1));
    166 
    167     *(--S.top) = NULL;
    168 
    169 }
  • 相关阅读:
    ubuntu安装打印机驱动
    clang-format的介绍和使用
    [C++面向对象]-C++成员函数和非成员函数
    [Qt2D绘图]-06QPainter的复合模式&&双缓冲绘图&&绘图中的其他问题
    [Qt2D绘图]-05绘图设备-QPixmap&&QBitmap&&QImage&&QPicture
    [Qt2D绘图]-04绘制文字&&绘制路径
    [Qt2D绘图]-03坐标系统之坐标变换
    [Qt2D绘图]-02坐标系统&&抗锯齿渲染
    [Qt2D绘图]-01Qt2D绘图基本绘制和填充
    [Qt插件]-01Qt插件&&提升部件(自定义控件)
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/6202761.html
Copyright © 2020-2023  润新知