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 }
原文链接: https://www.cnblogs.com/biyongyao/p/5402924.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/232087
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!