栈的应用:把二进制数转换为十进制数

// 二进制转换为十进制数(利用栈的数据结构)
#include < stdio.h >
#include
< math.h >
#include
< stdlib.h >
#include
< conio.h >
#define  STACK_INIT_SIZE 20
#define  STACKINCREMENT 10

typedef 
char  ElemType;
typedef 
struct {
    ElemType 
* base ;
    ElemType 
* top;
    
int  stacksize;
}sqStack;

initStack(sqStack 
* s)  // 创建一个栈
{
    s
-> base = (ElemType * )malloc(STACK_INIT_SIZE * sizeof (ElemType));
    
if ( ! s -> base )  exit( 0 );
    s
-> top = s -> base ;
    s
-> stacksize = STACK_INIT_SIZE;
}
Push(sqStack 
* s,ElemType e){
    
if (s -> top - s -> base >= s -> stacksize){
        s
-> base = (ElemType * )realloc(s -> base ,(s -> stacksize + STACKINCREMENT) * sizeof (ElemType));
        
if ( ! s -> base ) exit( 0 );
        s
-> top = s -> base + s -> stacksize;
        s
-> stacksize = s -> stacksize + STACKINCREMENT;
    }
    
* (s -> top) = e;
    s
-> top ++ ;
}

Pop(sqStack 
* s,ElemType  * e){
    
if (s -> top == s -> base return ;
    
* e =*-- (s -> top);
}

int  StackLen(sqStack s){  // 计算栈的当前容量
     return  (s.top - s. base );
}

int  main()
{
    ElemType c;
    sqStack s;   
//
     int  len,i,sum = 0 ;
    printf(
" Please input a Binary digit\n " );

    initStack(
& s);
    
// 输入0/1字符表示的二进制数,以#结束

    scanf(
" %c " , & c);
    
while (c != ' # ' )
    {
        Push(
& s,c);
        scanf(
" %c " , & c);
    }
    getchar();
    len
= StackLen(s);

    
for (i = 0 ;i < len;i ++ )
    {
        Pop(
& s, & c);
        sum
= sum + (c - 48 ) * pow( 2 ,i); // c-48是为了得到该字符对应的0/1值,这是因为字符0的ASCII码为48
    }
    printf(
" Decimal is %d\n " ,sum);
    getche();
    
return   0 ;
}


// 清空一个栈 代码
ClearStack(sqStack  * s)
{
    s
-> top = s -> base ;
}

// 销毁一个栈 代码

DestroyStack(sqStack 
* s)
{
    
int  i,len;
    len
= s -> stacksize;
    
for (i = 0 ;i < len;i ++ )
    {
        free(s
-> base );
        s
-> base ++ ;
    }
    s
-> base = s -> top = NULL;
    s
-> stacksize = 0 ;
}

你可能感兴趣的:(栈的应用:把二进制数转换为十进制数)