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("請輸入二進制數,輸入#結束!\n");
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\n",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 \n",sum);
83 
84      return 0;
85 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM