zoukankan      html  css  js  c++  java
  • c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)

      1 /*
      2    c++描述将2进制数转化成10进制数
      3    问题,1.初始化栈后,用new,不知道delete是否要再写一个函数释放内存,
      4            还是在哪里可以加上delete
      5          2.如果栈满了,我要分配多点空间,我想的办法是先用delete删除之前申请的
      6            空间,再用new重新申请,但是c语言有一个函数
      7            s->base =(ElemType*) realloc(s->base,(s->stackSize + STACKINCREMENT) * sizeof(ElemType));//分配空间
      8            不知道c++有没有這样的函数。
      9 */
     10 #include <iostream>
     11 #include <math.h>
     12 using namespace std;
     13 
     14 
     15 const int STACK_INIT_SIZE=20;
     16 const int STACKINCREMENT=10;
     17 
     18 typedef char ElemType;  //定义一个字符串,因为二进制只有0和1,0的ascii表为48 ,1为49,
     19                         //只要进栈元素减去48再乘以2的次方数就ok
     20 
     21 
     22 typedef struct 
     23 {
     24      ElemType* top;   //栈顶
     25      ElemType* base ;  // 栈底
     26      int  stackSize;   // 栈的容量
     27 }sqStack;
     28 
     29 
     30 void InitStack (sqStack *s)  //初始化栈
     31 {   
     32     try
     33     {
     34           s -> base = new ElemType  [STACK_INIT_SIZE] ; //申请空间
     35              s -> top = s -> base ;                     //栈空 ,栈顶等于栈底
     36           s -> stackSize = STACK_INIT_SIZE;      
     37     }
     38 
     39        catch (bad_alloc)
     40        {
     41           cout << "分配空间失败!"<< endl;
     42           exit (0);
     43        }
     44 }
     45 
     46 
     47 void Push (sqStack *s ,ElemType e)   // 进栈
     48 {
     49     try{
     50         if (s -> top - s -> base >= s->stackSize)
     51             {  
     52                  delete s -> base;     // 删除先前分配的空间再重新分配
     53                  s -> base = new ElemType[STACK_INIT_SIZE+STACKINCREMENT];
     54             }
     55            *(s->top) = e;   //先赋值再将栈顶往上移动
     56            s->top++;
     57         }   
     58     catch (bad_alloc){
     59             cout << "分配空间失败!"<< endl;
     60             exit (0);
     61     }
     62 }
     63 
     64 void Pop(sqStack *s, ElemType *e)
     65 {
     66        if (s -> top == s -> base)
     67        {
     68            cout << "栈为空"<<endl;
     69            exit(0);
     70        }
     71     
     72            s -> top --;     //先将栈顶指向元素,再把元素赋值给形参
     73            *e= * s->top;  //    *e = *--(s->top);    
     74       
     75 }
     76 
     77 int StackLen (sqStack s)    //返回栈有多少个元素
     78 {
     79    return ( s.top - s.base);  //  实质是地址相减 除以ElemType 
     80 } 
     81 
     82 
     83 
     84 int main()
     85 {
     86     ElemType c;  //声明一个字符c
     87     sqStack s;   //声明一个结构体s
     88 
     89     int len,i,sum=0;  
     90     InitStack(&s);     //初始化栈
     91     cout <<"请输入二进制数,输入#结束"<<endl;
     92     cin >>c;
     93     while( c != '#')
     94     {
     95        Push (&s,c);
     96        cin>>c;
     97     }
     98      getchar();   //接收回车键
     99      len =StackLen(s);
    100      cout <<"栈的当容量"<<len<<endl;
    101      for(i=0; i<len ; i++)
    102      {
    103          Pop(&s,&c);
    104          sum = sum + (c-48) * pow(2,i);  
    105      }
    106      cout <<"转化为十进制数为:"<<sum<<endl;
    107       
    108 
    109      return 0;
    110 }
    博客园的文章都是大学时写的,质量不太好。 我的新文章都会发布再新的 blog :https://blog.biyongyao.com 请大家关注哟!!
  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/biyongyao/p/5402924.html
Copyright © 2011-2022 走看看