• c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)


     1 //c语言描述  将2进制转化为10进制
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #include <math.h>
     5 #define STACK_INIT_SIZE 20
     6 #define     //栈满后再分配
     7 
     8 typedef char ElemType;
     9 typedef struct
    10 {
    11     ElemType *base;   //栈底
    12     ElemType *top;     //栈底
    13     int stackSize;      // 栈的容量
    14 }sqStack;
    15 
    16 void InitStack (sqStack *s)    //初始化栈
    17 {
    18        s -> base = (ElemType*) malloc(STACK_INIT_SIZE);
    19        if(! s-> base)
    20        { 
    21            printf("分配空间失败");
    22            exit(0);
    23        }
    24       s->top=s->base ;
    25       s->stackSize = STACK_INIT_SIZE;
    26 }
    27 
    28 void Push (sqStack *s, ElemType e)   //进栈
    29 {
    30        if(s->top - s->base >= s->stackSize)
    31        {
    32              s->base =(ElemType*) realloc(s->base,(s->stackSize + STACKINCREMENT) * sizeof(ElemType));//分配空间
    33                     if(! s-> base)
    34                    { 
    35                      printf("分配空间失败");
    36                      exit(0);
    37                    }
    38        }
    39        *(s->top) = e;           //先赋值
    40        s->top++;               //指针在+1
    41 }
    42 
    43 void Pop(sqStack * s,ElemType *e)    //出栈
    44 {
    45     if(s->top == s->base )
    46     {
    47        printf("栈为空,没法出栈");
    48            return;
    49     }
    50     *e = *--(s->top);    //首先把s->top的元素赋值给e 再将地址--
    51 }
    52 
    53      
    54 int StackLen (sqStack s)    //返回栈有多少个元素
    55 {
    56    return ( s.top - s.base);  //  实质是地址相减 除以ElemType 
    57 } 
    58 
    59 
    60 int main()
    61 {
    62     ElemType c;  //声明一个字符c
    63     sqStack s;   //声明一个结构体s
    64 
    65     int len,i,sum=0;  
    66     InitStack(&s);     //初始化栈
    67     printf("请输入二进制数,输入#结束!
    ");
    68     scanf("%c",&c);
    69     while( c != '#')
    70     {
    71        Push (&s,c);
    72        scanf ("%c",&c);
    73     }
    74      getchar();   //接收回车键
    75      len =StackLen(s);
    76      printf("栈的当容量:%d
    ",len);
    77      for(i=0; i<len ; i++)
    78      {
    79         Pop(&s,&c);
    80          sum = sum + (c-48) * pow(2,i);
    81      }
    82      printf("转化为十进制数为:%d 
    ",sum);
    83 
    84      return 0;
    85 }
    博客园的文章都是大学时写的,质量不太好。 我的新文章都会发布再新的 blog :https://blog.biyongyao.com 请大家关注哟!!
  • 相关阅读:
    假如时光倒流,我会这么学习Java
    一位资深程序员大牛给予Java初学者的学习路线建议
    Java基础部分全套教程.
    假如时光倒流,我会这么学习Java
    Window Location对象
    Window Screen对象
    Window
    easyui datagrid 清除缓存方法
    easyui tree扩展tree方法获取目标节点的一级子节点
    JavaScript 对象
  • 原文地址:https://www.cnblogs.com/biyongyao/p/5402926.html
Copyright © 2020-2023  润新知