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
请大家关注哟!!